Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: chsss 16. 07. 2012, 20:35:28

Název: Zápis do stdio a čtení stdout a stderr
Přispěvatel: chsss 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?
Název: Re:Zapis do stdio a cteni stdout a stderr child procesu v C
Přispěvatel: Wily 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
Název: Re:Zapis do stdio a cteni stdout a stderr child procesu v C
Přispěvatel: martin 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čí.
Název: Re:Zapis do stdio a cteni stdout a stderr child procesu v C
Přispěvatel: qwerqwerqwerqwr 16. 07. 2012, 23:17:08
googluj how to write linux daemon in C.

http://www.go4expert.com/forums/showthread.php?t=27616

http://www.danielhall.me/2010/01/writing-a-daemon-in-c/
Název: Re:Zapis do stdio a cteni stdout a stderr child procesu v C
Přispěvatel: Franta 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í.
Název: Re:Zápis do stdio a čtení stdout a stderr
Přispěvatel: chsss 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