Zápis do stdio a čtení stdout a stderr

chsss

Zápis do stdio a čtení stdout a stderr
« kdy: 16. 07. 2012, 20:35:28 »
Ahoj, potreboval bych napsat v Cecku jednoducheho daemona.
Ten by se spustil a spustil by potom dalsi proces, kteremu by do stdio v pravidelnych intervalech predaval data z urciteho souboru, ktery by pri kazdem predani dat vymazal. A taky by stdout a stderr toho potomka zapisoval do jineho souboru. A pri ukonceni potomka by zapsal do souboru a ukoncil se take.

Nemam paru o tom, jak to napsat. Muj problem je, ze tam je nejak moc cinnosti.
Mozna bych zvladnul otevrit si jeho file descriptory pomoci pipe(), fork(), dup2() a exec().
Ale dal nevim. Da se to udelat tak, ze rodicovsky proces bude po forku v nekonecne smycce (s rozumnym casovanim samozrejme), kdy bude provadet operace jako precteni stdout a stderr toho childu a kontrolu existence souboru, pripadne zapsani na stdio. Jenze v tomhle konceptu je problem, ze by se pomichaly radky stdout a stderr, coz se nesmi stat.

Poradite mi nekdo, jak na to, prosim?
« Poslední změna: 17. 07. 2012, 11:09:48 od Petr Krčmář »


Wily

Re:Zapis do stdio a cteni stdout a stderr child procesu v C
« Odpověď #1 kdy: 16. 07. 2012, 22:56:50 »
Z toho popisu mi neni přesně jasný co to má dělat. Ale myslím si, že v tom máš zmatek a asi bych začal synchronizaci procesů např. http://phoenix.inf.upol.cz/~outrata/courses/os2/texts/synch1_l.html

martin

Re:Zapis do stdio a cteni stdout a stderr child procesu v C
« Odpověď #2 kdy: 16. 07. 2012, 23:05:20 »
V rodičovském procesu použij smyčku s např. select(2) s deskriptory std* potomka (nejlépe dynamicky podle toho, jak budeš mít zaplňený buffer). Dobré bude také ošetřit SIGCHLD a smyčku opustit, když se potomek ukončí.

qwerqwerqwerqwr


Franta

Re:Zapis do stdio a cteni stdout a stderr child procesu v C
« Odpověď #4 kdy: 17. 07. 2012, 07:23:40 »
A musí to být obyčejný soubor? Co takhle použít rouru (`mkfifo roura`). Pak bys totiž nemusel periodicky kontrolovat, zda se v souboru objevila nová data a zápisy by směřovaly rovnou k tomu procesu tak, jak přicházejí.


chsss

Re:Zápis do stdio a čtení stdout a stderr
« Odpověď #5 kdy: 17. 07. 2012, 16:26:25 »
Aha, jasne. Franta mi otevrel oci. Zadny pomocny proces tam byt nemusi. Staci tomu (puvodne) potomkovi nasmerovat vystupy do souboru a uplne stejne mu take na vstup namirit pojmenovanou rouru. Diky