inicio mail me! sindicaci;ón

Tomasz Wysocki - dziennik internetowy

Otchłań mojego umysłu…

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

Liczba komentarzy: 2 »

  tomwys wrote @ lipiec 8th, 2006 at 10:23 pm

Przed chwilą przekonałem się, że rozwiązanie to nie działa, gdy program odpalimy w shellu, emulowanym przez emacsa.

  tomwys wrote @ lipiec 9th, 2006 at 5:53 pm

Okazuje się, że sam się zamotałem i w emacs wszystko działa dobrze.

Dodaj komentarz

Zostaw puste:

HTML-Tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>