Portál AbcLinuxu, 28. července 2025 19:02


Dotaz: Problem s pojmenovanou rourou

15.2.2007 18:21 nigol
Problem s pojmenovanou rourou
Přečteno: 124×
Odpovědět | Admin
Hezky vecer, mam problem s komunikaci pomoci pojmenovane roury. Mam konzolovy program "sic", ktery ocekava na standardnim vstupu nejake prikazy oddelene novym radkem a vysledky zapisuje na standardni vystup. Ja bych potreboval, aby misto ze std. vstupu cetl z roury a vysledek zapisoval do souboru out. Udelal jsem:
mkfifo pipe
./sic  < pipe > out &
echo "Prikaz" > pipe
a program "sic je okamzite ukoncen s hlaskou "Broken pipe". pritom pokud ho spustim z konzoly se standard vstupem/vystupem, funguje bezchybne az dokud nedam Ctrl-D a pote se korektne ukonci. Jenom bych poznamenal, ze pracuji na Mac OS X, ale to by snad nemelo hrat roli (doufam). Nemate nekdo napad, co s tim? Diky.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.2.2007 20:39 pavel
Rozbalit Rozbalit vše Re: Problem s pojmenovanou rourou
Odpovědět | | Sbalit | Link | Blokovat | Admin
Neměla by tam být celá cesta?
16.2.2007 06:34 nigol
Rozbalit Rozbalit vše Re: Problem s pojmenovanou rourou
Zkusit to muzu, ale myslim, ze problem bude zrejme jinde. Bohuzel jsem to napsal nepresne. Ono ta chyba se objevi az v okamziku, kdy neco zapisu do te roury. Do te doby to funguje tak, jak bych ocekaval - ceka na prichozi data.
Josef Kufner avatar 16.2.2007 10:26 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Problem s pojmenovanou rourou
Přesněji, nestane se to v okamžiku zápisu, stane se to v okamžiku uzavření roury na straně zapisujícího procesu.

Zkusil bych ( echo "..." ; cat ) > roura a doufal, že cat umře při zavření roury na straně čtoucího procesu.
Hello world ! Segmentation fault (core dumped)
16.2.2007 10:42 nigol
Rozbalit Rozbalit vše Re: Problem s pojmenovanou rourou
Diky, s tim uzavrenim mate pravdu. Vyzkousim jak se dostanu domu.
16.2.2007 10:03 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Problem s pojmenovanou rourou
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud není něco shnilého v tom programu, je to velmi podivné, ale těžko hádat, na Linuxu se mi to tak nechová. Co se stane, když tam místo toho vašeho programu dáte třeba cat?
16.2.2007 10:49 nigol
Rozbalit Rozbalit vše Re: Problem s pojmenovanou rourou

Zbezne jsem vcera prohledl zdrojak a na prvni pohled se me zdal v poradku. Ovsem nemam zadne velke zkusenosti s programovanim UNIX aplikaci, takze jsem mozna neco prehledl. S tim cat to zkusim.

Pokud bych jeste mohl vyuzit teto diskuse, rad bych si vyjasnil jeste jednu vec. Jak jsem pochopil, pokud zadam napr. echo "Ahoj" > pipe, tak to zrejme posle i EOF a roura se uzavre. Co kdybych ovsem chtel poslat napriklad to "Ahoj" a chtel nechat rouru otevrenou s tim, ze do ni za nejaky cas opet poslu dalsi text? Je nejake reseni?

16.2.2007 11:02 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Problem s pojmenovanou rourou
Obvykle se to řeší tak, že jakmile dostanete EOF, rouru zase otevřete.
16.2.2007 11:15 nigol
Rozbalit Rozbalit vše Re: Problem s pojmenovanou rourou
To ale pravdepodobne znamena upravu toho puvodniho programu, cemuz jsem se chtel vyhnout. Protoze ten program se okamzite po tom, co dostane EOF ukonci. Nicmene dekuji za cenne rady.
Jardík avatar 16.2.2007 14:20 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Problem s pojmenovanou rourou
echo "Ahoj" žádné EOF nepošle. Akorát pošle EOL (end of line), čemuž se dá zabránit přepínačem -n.
Věřím v jednoho Boha.
16.2.2007 15:10 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Problem s pojmenovanou rourou
Tady je zas někdo chytrej jak rádio. Dobře, echo žádný EOF nepošle, akorát, že shell pos končení echo zavolá na příslušný konec té roury close(), což udělá prakticky totéž. Spokojený?
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
16.2.2007 15:36 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Problem s pojmenovanou rourou
mozes pouzit:
tail -f pipe | ./sic
If you hold a Unix shell up to your ear, you can you hear the C.
16.2.2007 15:59 nigol
Rozbalit Rozbalit vše Re: Problem s pojmenovanou rourou
Odpovědět | | Sbalit | Link | Blokovat | Admin
Diky vsem, zjistil jsem, ze bude zrejme problem i v tom progrmu "sic", protoze treba cat nebo dc "Broken pipe" nevyhazuje. Jeste jednou diky vsem.
Josef Kufner avatar 16.2.2007 16:51 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Problem s pojmenovanou rourou
Tak pošli autorům programu sic bugreport nebo rovnou patch ;-)
Hello world ! Segmentation fault (core dumped)
16.2.2007 18:27 nigol
Rozbalit Rozbalit vše Re: Problem s pojmenovanou rourou

Ono ten program sic je jednoduchy IRC klient, ktery ma primo v popisu prace interakci s konzolou a to ovladani pres rouru bylo jaksi navic a autori s tim asi nepocitali. Kdyby neexistoval jeste program ii od stejnych autoru, na ktery jsem narazil az ted, tak bych urcite "sic" nejak upravil, ale takhle to postrada smysl, protoze "ii" je pro tyhle ucely vhodnejsi :)

Jinak jeste, proc jsem to chtel...Rikal sem si, ze bych si mohl zabudovat IRC do editoru Vim (existuje VimIRC, ale to me nejak moc dobre nefunguje). Puvodne jsem chtel pouzit "sic", ale pak jsem narazil na "ii" a s jeho pomoci se to podarilo a uz to funguje.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.