inicio mail me! sindicaci;ón

Tomasz Wysocki - dziennik internetowy

Otchłań mojego umysłu…

Archive for C/C++

Wyłącznie stdout i stderr w programie

Podczas pisania programu publikującego wpisy na blogu, natknąłem się na problem. Moja aplikacja robiła fork, a następnie exec na program napisany przez innego autora. Powodowało to, że proces potomny, którego kod nie znajdował się pod moją kontrolą, wysyłał informacje na stderr i stdout, czego chciałem uniknąć. Szukałem więc sposobu, za pomocą którego mógłbym “wyciąć” strumienie stderr i stdout dla danego procesu. To do czego doszedłem prezentuje poniższy listing:

freopen("/dev/null","w",stderr);
freopen("/dev/null","w",stdout);

Powyższy kod trzeba umieścić bezpośrednio, przed wywołaniem exec. Funkcja freopen, której deklaracja znajduje się w stdio.h, otwiera do odczytu /dev/null i zapisuje uchwyty w zmiennych stderr i stdout, które domyślnie odpowiadają za strumienie wyjścia. Oczywiście zamiast /dev/null możemy użyć innego pliku (lub dwóch plików), co daje nam później możliwość analizowania, zwracanej przez proces treści.

Tomasz “tomwys” Wysocki