Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: 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?
-
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
-
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čí.
-
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/
-
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í.
-
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