abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 11:22 | Nová verze

    Memtest86+ (Wikipedie), svobodný nástroj pro kontrolu operační paměti, byl vydán ve verzi 8.00. Přináší podporu nejnovějších procesorů Intel a AMD nebo také tmavý režim.

    Ladislav Hagara | Komentářů: 0
    dnes 10:55 | Nová verze

    Programovací jazyk Racket (Wikipedie), tj. jazyk z rodiny jazyků Lisp a potomek jazyka Scheme, byl vydán v nové major verzi 9.0. Hlavní novinku jsou paralelní vlákna (Parallel Threads).

    Ladislav Hagara | Komentářů: 0
    dnes 10:11 | Komunita

    Před šesti týdny bylo oznámeno, že Qualcomm kupuje Arduino. Minulý týden byly na stránkách Arduina aktualizovány podmínky používání a zásady ochrany osobních údajů. Objevily se obavy, že by otevřená povaha Arduina mohla být ohrožena. Arduino ubezpečuje, že se nic nemění a například omezení reverzního inženýrství v podmínkách používání se týká pouze SaaS cloudové aplikace.

    Ladislav Hagara | Komentářů: 0
    včera 13:33 | Bezpečnostní upozornění

    Knihovna libpng, tj. oficiální referenční knihovna grafického formátu PNG (Portable Network Graphics), byla vydána ve verzi 1.6.51. Opraveny jsou 4 bezpečnostní chyby obsaženy ve verzích 1.6.0 (vydána 14. února 2013) až 1.6.50. Nejvážnější z chyb CVE-2025-65018 může vést ke spuštění libovolného kódu.

    Ladislav Hagara | Komentářů: 5
    včera 12:22 | Zajímavý článek

    Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 159 (pdf).

    Ladislav Hagara | Komentářů: 0
    21.11. 22:33 | Zajímavý software

    Hru Warhammer: Vermintide 2 (ProtonDB) lze na Steamu získat zdarma napořád, když aktivaci provedete do pondělí 24. listopadu.

    Ladislav Hagara | Komentářů: 1
    21.11. 19:33 | Nová verze Ladislav Hagara | Komentářů: 0
    21.11. 13:11 | IT novinky

    Evropská komise schválila český plán na poskytnutí státní pomoci v objemu 450 milionů eur (téměř 11 miliard Kč) na rozšíření výroby amerického producenta polovodičů onsemi v Rožnově pod Radhoštěm. Komise o tom informovala v dnešní tiskové zprávě. Společnost onsemi by podle ní do nového závodu v Rožnově pod Radhoštěm měla investovat 1,64 miliardy eur (téměř 40 miliard Kč).

    Ladislav Hagara | Komentářů: 22
    21.11. 06:11 | Komunita

    Microsoft v příspěvku na svém blogu věnovaném open source oznámil, že textové adventury Zork I, Zork II a Zork III (Wikipedie) jsou oficiálně open source pod licencí MIT.

    Ladislav Hagara | Komentářů: 0
    21.11. 05:55 | Komunita

    První prosincový týden proběhne SUSE Hack Week 25. Zaměstnanci SUSE mohou věnovat svůj pracovní čas libovolným open source projektům, například přidání AI agenta do Bugzilly, implementaci SSH v programovacím jazyce Zig nebo portaci klasických her na Linux. Připojit se může kdokoli.

    Ladislav Hagara | Komentářů: 4
    Jaké řešení používáte k vývoji / práci?
     (35%)
     (46%)
     (19%)
     (18%)
     (22%)
     (15%)
     (23%)
     (16%)
     (17%)
    Celkem 392 hlasů
     Komentářů: 17, poslední 19.11. 21:57
    Rozcestník

    Dotaz: Implementace roury v C

    17.7.2013 09:04 k-barter_CZ | skóre: 2 | Zlín
    Implementace roury v C
    Přečteno: 606×
    Zdravím,

    napsal jsem si program, který je schopen číst argumenty přes příkaz řádku a umí rozpoznat, zda je vstup soubor či uzávorkovaný text.

    Nyní jsem ve fázi, kdy bych chtěl naimplementovat pajpu ( | ). Googloval jsem asi 3 dny a tady je link, kde bych se mohl chytit:

    http://snap.nlc.dcccd.edu/learn/fuller3/chap11/chap11.html

    na ABC jsem taky něco našel, konkrétně http://www.abclinuxu.cz/poradna/programovani/show/373050

    Našel jsem toho vícero, ale některé workaroundy mi přišly komplikované..

    Potíž je v tom, že jako amatérský programátor o implementaci roury nic nevím, nicmnéně vím, jak roura funguje v systému (stdout programu A -> stdin programu B). Zkoušel jsem to na svém programu, nicméně můj program se chová, jako by žádný argument na příkazové řádce nedostal.

    Jak už jsem řekl, program je ve stádiu kdy dokáže přijmout soubor (otevře a přečtě), nebo uzávorkovaný text a výsledek hodí na terminál, pokud nepřesměruji do souboru, nebo rourou do jiného programu (což funguje). V tomto případě mi jde o přímý vstup textu, pokud to nepůjde, nic se neděje, jen budu muset dělat soubory, což je záležitost jednoho > , potažmo >> .

    Na závěr dodám, že se řídím standardními int main(int argc a char* argv[]), poté z argv kopiruje do pole a potom podle toho buď čte přímo, nebo otevře soubor.


    Řešení dotazu:


    Odpovědi

    17.7.2013 09:40 potato
    Rozbalit Rozbalit vše Re: Implementace roury v C
    Asi nerozumím otázce, ale programy normálně neimplementují rouru (dokonce ani nevědí, že se v rouře nacházejí). Je to konstrukce shellu, takže shell programům v rouře nastaví stdin/stdout, aby si vstupy a výstupy pěkně předávaly.

    Tedy implementovat rouru znamená, že chceš udělat totěž co dělá shell: spustit dva jiné procesy a nastavit jim stdin a stdout tak, aby výstup jednoho šel na vstup druhého. Tohle je v těch odkazovaných příkladech ukázáno a moc jednodušeji se to udělat nedá.

    Pokud chceš dělat něco jiného (nevidím tu totiž ani slovo o spouštění dalších procesů), tak zkus víc popsat, o co se vlastně snažíš.
    17.7.2013 10:31 Zadejte vaše jméno
    Rozbalit Rozbalit vše Re: Implementace roury v C
    Jak si napsal, | posila data do stdin, ne do argv, musis teda cist z tama... A nebo pouzivat neco jako echo file |xargs tvujprogram
    17.7.2013 13:09 k-barter_CZ | skóre: 2 | Zlín
    Rozbalit Rozbalit vše Re: Implementace roury v C
    Zdravím,

    Ano, chci aby můj program bral obsah roury, napr echo "text" | program , pričemž program se tváří, že na vstupu jako argument nic nedostal, ale když zadám program "soubor nebo text", tak už se něco děje.

    Nicméně qrencode, CL utilita na generaci QR kódů, to vezme bez jakýkoliv potíží. Nicméně qrencode je v jiném jazyku, můj program je čisté C.

    Nicméně děkuji za Vaše tipy, zkusím si odkazy projít ještě jednou. Abych byl upřímný, mě ty postupy přijdou pro mě osobně "psycho". Možná jsem jen něco špatně pochopil nebo mám špatnou představivost.
    17.7.2013 13:19 R
    Rozbalit Rozbalit vše Re: Implementace roury v C
    Nechapes zaklady. Citaj zo standardneho vstupu (stdin)!
    18.7.2013 00:09 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Implementace roury v C
    Chyba je v představě, že když napíšete "aaa | bbb", tak příkaz aaa dostane svislou čáru jako parametr. Tu ale ve skutečnosti interpretuje už shell a program má rovnou rouru otevřenou pro zápis jako deskriptor 1, tj. standardní výstup. Druhý program má pak tutéž rouru otevřenou pro čtení coby deskriptor 0, tj. standardní vstup. Programy samotné pak skutečnost, že jsou spuštěny přes rouru, vůbec nezajímá a chovají se stejně, jako kdybyste je spustil samostatně (až na výjimky, např. některé programy mají mírně odlišný výstup podle toho, jestli je výstupem terminál nebo ne).
    stativ avatar 17.7.2013 14:28 stativ | skóre: 54 | blog: SlaNé roury
    Rozbalit Rozbalit vše Re: Implementace roury v C
    Jak už ostatní psali, pro vstup z roury se použije čtení ze stdin. Ve vašem případě (pokud to dobře chápu) chcete dosáhnout toho, že program bude moct číst argumenty z roury, nebo z argumentů příkazového řádku.

    Na to je potřeba rozlišit, jestli má terminál, nebo ne. Na to je funkce isatty(). Pokud terminál má, argumenty budete číst z (char **argv) (tj. parametru main), pokud ne, vstup je z roury a je potřeba číst ze stdin.

    V praxi by to vypadalo zhruba následovně (kód není funkční, je to jen ukázka):
    char* argument;
    
    if (isatty(STDIN_FILENO)) {
      argument = argv[1];
    } else {
      argument = // read_from_stdin
    }
    
    Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk

    Založit nové vláknoNahoru

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

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.