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 14:00 | Zajímavý článek

    Byl publikován aktuální přehled vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie).

    Ladislav Hagara | Komentářů: 0
    včera 12:00 | Nová verze

    V programovacím jazyce Go naprogramovaná webová aplikace pro spolupráci na zdrojových kódech pomocí gitu Forgejo byla vydána ve verzi 12.0 (Mastodon). Forgejo je fork Gitei.

    Ladislav Hagara | Komentářů: 0
    17.7. 18:44 | Zajímavý článek

    Nová čísla časopisů od nakladatelství Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 155 (pdf) a Hello World 27 (pdf).

    Ladislav Hagara | Komentářů: 1
    17.7. 16:11 | Nová verze

    Hyprland, tj. kompozitor pro Wayland zaměřený na dláždění okny a zároveň grafické efekty, byl vydán ve verzi 0.50.0. Podrobný přehled novinek na GitHubu.

    Ladislav Hagara | Komentářů: 2
    17.7. 15:55 | Komunita

    Patrick Volkerding oznámil před dvaatřiceti lety vydání Slackware Linuxu 1.00. Slackware Linux byl tenkrát k dispozici na 3,5 palcových disketách. Základní systém byl na 13 disketách. Kdo chtěl grafiku, potřeboval dalších 11 disket. Slackware Linux 1.00 byl postaven na Linuxu .99pl11 Alpha, libc 4.4.1, g++ 2.4.5 a XFree86 1.3.

    Ladislav Hagara | Komentářů: 5
    16.7. 21:22 | IT novinky

    Ministerstvo pro místní rozvoj (MMR) jako první orgán státní správy v Česku spustilo takzvaný „bug bounty“ program pro odhalování bezpečnostních rizik a zranitelných míst ve svých informačních systémech. Za nalezení kritické zranitelnosti nabízí veřejnosti odměnu 1000 eur, v případě vysoké závažnosti je to 500 eur. Program se inspiruje přístupy běžnými v komerčním sektoru nebo ve veřejné sféře v zahraničí.

    Ladislav Hagara | Komentářů: 19
    16.7. 16:22 | IT novinky

    Vláda dne 16. července 2025 schválila návrh nového jednotného vizuálního stylu státní správy. Vytvořilo jej na základě veřejné soutěže studio Najbrt. Náklady na přípravu návrhu a metodiky činily tři miliony korun. Modernizovaný dvouocasý lev vychází z malého státního znaku. Vizuální styl doprovází originální písmo Czechia Sans.

    Ladislav Hagara | Komentářů: 26
    16.7. 15:33 | Upozornění

    Vyhledávač DuckDuckGo je podle webu DownDetector od 2:15 SELČ nedostupný. Opět fungovat začal na několik minut zhruba v 15:15. Další služby nesouvisející přímo s vyhledáváním, jako mapyAI asistent jsou dostupné. Pro některé dotazy během výpadku stále funguje zobrazování například textu z Wikipedie.

    bindiff | Komentářů: 8
    16.7. 13:33 | Bezpečnostní upozornění

    Více než 600 aplikací postavených na PHP frameworku Laravel je zranitelných vůči vzdálenému spuštění libovolného kódu. Útočníci mohou zneužít veřejně uniklé konfigurační klíče APP_KEY (např. z GitHubu). Z více než 260 000 APP_KEY získaných z GitHubu bylo ověřeno, že přes 600 aplikací je zranitelných. Zhruba 63 % úniků pochází z .env souborů, které často obsahují i další citlivé údaje (např. přístupové údaje k databázím nebo cloudovým službám).

    Ladislav Hagara | Komentářů: 5
    16.7. 00:11 | Nová verze

    Open source modální textový editor Helix, inspirovaný editory Vim, Neovim či Kakoune, byl vydán ve verzi 25.07. Přehled novinek se záznamy terminálových sezení v asciinema v oznámení na webu. Detailně v CHANGELOGu na GitHubu.

    Ladislav Hagara | Komentářů: 0
    Jaký je váš oblíbený skriptovací jazyk?
     (59%)
     (27%)
     (7%)
     (3%)
     (0%)
     (1%)
     (4%)
    Celkem 410 hlasů
     Komentářů: 16, poslední 8.6. 21:05
    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: 287×

    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.