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í
×
    včera 23:33 | Nová verze

    Richard Biener oznámil vydání verze 16.1 (16.1.0) kolekce kompilátorů pro různé programovací jazyky GCC (GNU Compiler Collection). Jedná se o první stabilní verzi řady 16. Přehled změn, nových vlastností a oprav a aktualizovaná dokumentace na stránkách projektu. Některé zdrojové kódy, které bylo možné přeložit s předchozími verzemi GCC, bude nutné upravit.

    Ladislav Hagara | Komentářů: 0
    včera 23:11 | Nová verze

    Zulip Server z open source komunikační platformy Zulip (Wikipedie, GitHub) byl vydán ve verzi 12.0. Přehled novinek v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    včera 12:11 | IT novinky

    Před 30 lety, tj. v úterý 30. dubna 1996, byl spuštěn Seznam.cz.

    Ladislav Hagara | Komentářů: 4
    včera 11:44 | Komunita

    Byly zpracovány a zveřejněny všechny videozáznamy, které stojí za zveřejnění, z konference FOSDEM 2026.

    Ladislav Hagara | Komentářů: 0
    včera 01:11 | IT novinky

    Od úterý 28. dubna musí nově uváděné notebooky v Evropské unii podporovat nabíjení přes USB-C. Jednotná nabíječka byla schválena Evropským parlamentem v říjnu 2022.

    Ladislav Hagara | Komentářů: 53
    29.4. 23:44 | Bezpečnostní upozornění

    Byly publikovány informace o kritické zranitelnosti CVE-2026-31431 pojmenované Copy Fail v Linuxu, konkrétně v kryptografii (AF_ALG). Běžný uživatel může získat práva roota (lokální eskalaci práv). Na všech distribucích Linuxu vydaných od roku 2017. Pomocí 732bajtového skriptu. V upstreamu je již opraveno. Zranitelnost byla nalezena pomocí AI Xint Code.

    Ladislav Hagara | Komentářů: 4
    29.4. 17:44 | Nová verze

    Textový editor Zed dospěl do verze 1.0. Představení v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    29.4. 04:44 | Komunita

    Vývojáři svobodného 3D softwaru Blender představili (𝕏, Mastodon, Bluesky) nejnovějšího firemního sponzora Blenderu. Je ním společnost Anthropic stojící za AI Claude a úroveň sponzoringu je Patron, tj. minimálně 240 tisíc eur ročně. Anthropic oznámil sponzorství v tiskové zprávě Claude for Creative Work.

    Ladislav Hagara | Komentářů: 7
    29.4. 03:55 | Nová verze

    VNC server wayvnc pro Wayland kompozitory postavené nad wlroots - ne GNOME, KDE nebo Weston - byl vydán ve verzi 0.10.0. Vydána byla také verze 1.0.0 související knihovny neatvnc.

    Ladislav Hagara | Komentářů: 0
    28.4. 16:22 | Nová verze

    Bylo oznámeno vydání Fedora Linuxu 44. Ve finální verzi vychází šest oficiálních edic: Fedora Workstation a Fedora KDE Plasma Desktop pro desktopové, Fedora Server pro serverové, Fedora IoT pro internet věcí, Fedora Cloud pro cloudové nasazení a Fedora CoreOS pro ty, kteří preferují neměnné systémy. Vedle nich jsou k dispozici také další atomické desktopy, spiny a laby. Podrobný přehled novinek v samostatných článcích na stránkách

    … více »
    Ladislav Hagara | Komentářů: 7
    Které desktopové prostředí na Linuxu používáte?
     (14%)
     (8%)
     (2%)
     (13%)
     (31%)
     (3%)
     (6%)
     (3%)
     (15%)
     (24%)
    Celkem 1467 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Dotaz: select() a roura

    10.4.2005 11:34 Martin Tůma | skóre: 39 | blog: RTFM | Praha
    select() a roura
    Přečteno: 308×

    Snažím se v C napsat program, kde jsou 2 procesy propojený rourou, přičemž bych potřeboval dosáhnout takovýho chování, aby když od "zdroje" nepřicházejí žádná data, příjemce usnul a když nějaká data dorazí, tak aby se vzbudil. Snažim se to řešit pomocí select(), ale nějak mi to nefunguje...

    sesmolil jsem toto:

    #include <stdio.h>
    #include <sys/time.h>
    #include <sys/types.h>
    #include <unistd.h>
    
      
    int main(void) {
        int     i, fd[2];
        pid_t   pid;
        fd_set  rfds;
        struct  timeval tv;
        int     retval;	
    	
        pipe(fd);
        pid = fork();
    
        if (pid > 0) {        /* parent */
            close(fd[0]);
    		
            while(1) {
    	    i = random()%10;
                write(fd[1], &i, sizeof(int));
                sleep(1);	
            }
    		
        } else {                /* child */
    
            close(fd[1]);
    
            FD_ZERO(&rfds);
            FD_SET(fd[0], &rfds);
            tv.tv_sec = 0;
            tv.tv_usec = 500;
    
            while(1) {
                retval = select(1, &rfds, NULL, NULL, &tv);
      
                if (retval == -1)
                    perror("select()");
                else if (retval) {
                    printf("Data\n");
                    read(fd[0], &i, sizeof(int));
                } else
                    printf("No data\n");
            }
        }
    
        return(0);
    }
    

    Problém je ale ten, že to na data v rouře vůbec nereaguje (výsledkem je neustále se opakující výpis "No data"). Může mi někdo poradit, co dělám špatně, nebo jak tenhle problém případně řešit jinak? Díky

    Každý má právo na můj názor!

    Odpovědi

    10.4.2005 11:56 unchallenger | skóre: 69 | blog: unchallenger
    Rozbalit Rozbalit vše Re: select() a roura
    aby když od "zdroje" nepřicházejí žádná data, příjemce usnul a když nějaká data dorazí, tak aby se vzbudil.

    Jelikož read() blokuje, může být nejjednodušší řešení vůbec to neřešit. Zavoláš-li read() a nejsou k disposici data, proces se tím dobrovolně vzdá svého timeslice.

    (Program jsem zatím pořádně nečetl.)
    10.4.2005 12:04 unchallenger | skóre: 69 | blog: unchallenger
    Rozbalit Rozbalit vše Re: select() a roura
    Jo, tak bug je zde:
    retval = select(1, &rfds, NULL, NULL, &tv);
    
    musí tam být něco jako
    retval = select(fd[0]+1, &rfds, NULL, NULL, &tv);
    
    10.4.2005 12:30 Martin Tůma | skóre: 39 | blog: RTFM | Praha
    Rozbalit Rozbalit vše Re: select() a roura

    Super, to je ono, díky moc. (Můžu se ještě s dovolením zeptat PROČ to tak musí být?).

    Jelikož read() blokuje, může být nejjednodušší řešení vůbec to neřešit. Zavoláš-li read() a nejsou k disposici data, proces se tím dobrovolně vzdá svého timeslice.

    Dá se to považovat za uspání, nebo se to nějak liší od toho, když v procesu pustim sleep(). Jde o to, že to musí vyhovovat tomuto zadání:

    ...Proces S třídí tyto čísla. rychlostí u komparací za jednotku času a zasílá nejnižší dostupná čísla procesu C (pokud nejsou k dispozici, je proces C uspán)...

    Respektivě, můžu se na tebe odkazovat při obhajově své práce? ;-)

    Každý má právo na můj názor!
    10.4.2005 12:49 unchallenger | skóre: 69 | blog: unchallenger
    Rozbalit Rozbalit vše Re: select() a roura
    Ad fd[0]+1. Tato část je jednoduchá (select(2)):

    n is the highest-numbered descriptor in any of the three sets, plus 1.

    Ad usnutí v read(). Proces určitě nežere CPU, dokud se neobjeví data, ale jinak IANAKH. Pokud ti někdo napíše, že máš proces uspat, tak možná chce, abys ho uspal...
    10.4.2005 12:52 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
    Rozbalit Rozbalit vše Re: select() a roura
    Pokud ti někdo napíše, že máš proces uspat, tak možná chce, abys ho uspal...
    No já bych se určitě s nějakým select() ne**** a argumentoval bych, že spí v read() takže jsem splnil zadání ;-)

    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.