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 12:22 | Zajímavý software

    Edvard Rejthar na blogu zaměstnanců CZ.NIC představil svou aplikaci SlideRshow (GitHub). Funguje jako prohlížeč fotek, ale i jako jejich organizér a prezentátor. Neinstaluje se, běží přímo v prohlížeči. Bez serveru. Offline.

    Ladislav Hagara | Komentářů: 0
    dnes 11:44 | Nová verze

    Kermit, tj. protokol pro přenos souborů, vznikl před 45 lety. Při této příležitosti byla po 15 letech od vydání poslední stabilní verze 9.0.302 vydána nová stabilní verze 11 implementace C-Kermit. S podporou IPv6.

    Ladislav Hagara | Komentářů: 0
    dnes 11:11 | Zajímavý článek

    První verze konverzního nástroje Pandoc byla vydána před 20 lety. Jeho autor John MacFarlane při tomto výročí rekapituluje jednotlivé etapy vývoje a přidávání nových funkcí – rozšíření nejen Markdownu a podporu mnoha dalších formátů.

    |🇵🇸 | Komentářů: 0
    dnes 00:55 | Pozvánky

    Srpen přinesl nejen další spalující vedro, ale také Virtuální Bastlírnu s neméně žhavými novinkami. Využijte tedy předpovědi na deštivý čtvrteční večer a od 20:00 se připojte online k tomuto neformálnímu setkání kutilů, techniků a vědců, kde se strahovskými bastlíři proberete nejzajímavější věci, na které jste narazili za poslední měsíc. Pokud jde o novinky, řeč zcela jistě přijde na systém INDX pro tiskárny Průša, který na konci

    … více »
    bkralik | Komentářů: 0
    včera 17:22 | Zajímavý článek

    Firma T-Mobile blokovala „dezinformační web“ AC24 bez toho, aniž by k tomu měla závazný pokyn orgánů veřejné moci. Píše to ve svém rozsudku Městský soud v Praze, který po čtyřech letech uzavřel kauzu blokace zmíněného webu. Operátor musí uhradit škodu ve výši 35 tisíc korun. Advokát společnosti T-Mobile se snažil i u odvolacího senátu argumentovat tím, že firma jednala v dobré víře, když na stránky omezila přístup poté, co ji k tomu vyzvalo

    … více »
    Ladislav Hagara | Komentářů: 14
    včera 16:33 | IT novinky

    Padla obžaloba v bitcoinové kauze. Státní zástupkyně chce pro Blažka 6,5 roku vězení, pro Titze 8 let.

    Ladislav Hagara | Komentářů: 0
    včera 15:22 | IT novinky Ladislav Hagara | Komentářů: 3
    včera 14:22 | Komunita

    Na GitHubu byl publikován seznam 55 kritických bezpečnostních chyb v SQLite s přiřazenými CVE čísly. JFrog Security informuje, že se jedná jenom o AI slop, části kódu na které CVE odkazují, v daných verzích vůbec neexistují. Upozorňuje také, že čísla CVE jsou přiřazována bez ověřování.

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

    Příspěvek na blogu Google Security popisuje, jak tým Chrome Security využívá umělou inteligenci k zásadnímu zrychlení a zlepšení procesu odhalování, třídění a opravování bezpečnostních chyb v prohlížeči Chrome. Díky AI byla nalezena kritická chyba, která byla v kódu přes 13 let. Ve verzích Chrome 149 a 150 bylo opraveno více chyb než v předchozích 23 verzích dohromady.

    Ladislav Hagara | Komentářů: 0
    2.8. 13:11 | IT novinky

    Firmy v EU musí počínaje dnešním dnem označovat obsah vytvořený umělou inteligencí. Znamená to povinnost informovat uživatele, že člověk komunikuje s chatbotem či jiným systémem AI. Rovněž obrázky, audia či videa, které jsou vytvořené nebo zmanipulované pomocí umělé inteligence a které mohou působit jako autentické, musejí být jasně označeny jako uměle vytvořené.

    Ladislav Hagara | Komentářů: 4
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (7%)
     (2%)
     (18%)
     (30%)
     (6%)
     (6%)
     (2%)
     (15%)
     (23%)
    Celkem 2317 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    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: 681×
    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.