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

    OpenClaw je open-source AI asistent pro vykonávaní různých úkolů, ovládaný uživatelem prostřednictvím běžných chatovacích aplikací jako jsou například WhatsApp, Telegram nebo Discord. Asistent podporuje jak různé cloudové modely, tak i lokální, nicméně doporučován je pouze proprietární model Claude Opus 4.5 od firmy Anthropic v placené variantě. GitHubová stránka projektu OpenClaw.

    NUKE GAZA! 🎆 | Komentářů: 2
    dnes 03:00 | Komunita

    Projekt VideoLAN a multimediální přehrávač VLC (Wikipedie) dnes slaví 25 let. Vlastní, tenkrát ještě studentský projekt, začal již v roce 1996 na vysoké škole École Centrale Paris. V první únorový den roku 2001 ale škola oficiálně povolila přelicencování zdrojových kódů na GPL a tím pádem umožnila používání VLC mimo akademickou půdu.

    Ladislav Hagara | Komentářů: 1
    včera 18:11 | Humor

    Moltbook je sociální síť podobná Redditu, ovšem pouze pro agenty umělé inteligence - lidé se mohou účastnit pouze jako pozorovatelé. Agenti tam například rozebírají podivné chování lidí, hledají chyby své vlastní sociální sítě, případně spolu filozofují o existenciálních otázkách 🤖.

    NUKE GAZA! 🎆 | Komentářů: 2
    včera 18:00 | Humor

    scx_horoscope je „vědecky pochybný, kosmicky vtipný“ plně funkční plánovač CPU založený na sched_ext. Počítá s polohami Slunce a planet, fázemi měsíce a znameními zvěrokruhu. Upozornil na něj PC Gamer.

    |🇵🇸 | Komentářů: 4
    30.1. 18:22 | Komunita

    O víkendu probíhá v Bruselu konference FOSDEM 2026 (Free and Open source Software Developers’ European Meeting). Program konference je velice nabitý: 37 místností, 71 tracků, 1184 přednášejících, 1069 přednášek, prezentací a workshopů. Sledovat je lze i online. K dispozici budou jejich videozáznamy. Aktuální dění lze sledovat na sociálních sítích.

    Ladislav Hagara | Komentářů: 4
    30.1. 18:00 | IT novinky

    Společnost Nex Computer stojící za "notebooky bez procesorů a pamětí" NexDock představila telefon NexPhone, který může funguje jako desktop PC, stačí k němu připojit monitor, klávesnici a myš nebo NexDock. Telefon by měl být k dispozici ve třetím čtvrtletí letošního roku. Jeho cena by měla být 549 dolarů. Předobjednat jej lze s vratní zálohou 199 dolarů. V dual-bootu by měl být předinstalovaný Android s Linuxem (Debian) jako aplikací a Windows 11.

    Ladislav Hagara | Komentářů: 3
    30.1. 16:00 | Nová verze

    Byla vydána nová major verze 9.0 softwaru pro správu elektronických knih Calibre (Wikipedie). Přehled novinek v poznámkách k vydání. Vypíchnuta je podpora AI.

    Ladislav Hagara | Komentářů: 3
    30.1. 14:22 | Nová verze

    Wasmer byl vydán ve verzi 7.0. Jedná se o běhové prostředí pro programy ve WebAssembly. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

    Ladislav Hagara | Komentářů: 1
    30.1. 12:22 | Zajímavý software

    V reakci na nepopulární plán Microsoftu ještě více ve Windows prohloubit integraci umělé inteligence Copilot, Opera na sociální síti 𝕏 oznámila, že připravuje nativní linuxovou verzi prohlížeče Opera GX. Jedná se o internetový prohlížeč zaměřený pro hráče, přičemž obsahuje všechny základní funkce běžného prohlížeče Opera. Kromě integrace sociálních sítí prohlížeč například disponuje 'omezovačem', který umožňuje uživatelům omezit využití sítě, procesoru a paměti prohlížečem, aby se tak šetřily systémové zdroje pro jinou aktivitu.

    NUKE GAZA! 🎆 | Komentářů: 8
    30.1. 06:22 | Zajímavý software

    NVIDIA vydala nativního klienta své cloudové herní služby GeForce NOW pro Linux. Zatím v beta verzi.

    Ladislav Hagara | Komentářů: 3
    Které desktopové prostředí na Linuxu používáte?
     (19%)
     (6%)
     (0%)
     (10%)
     (24%)
     (3%)
     (5%)
     (2%)
     (11%)
     (31%)
    Celkem 714 hlasů
     Komentářů: 22, poslední 29.1. 23:06
    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: 610×
    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.