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 18:44 | Pozvánky

Koncem ledna, 29. 1. 2018 od 17 do 20 hodin se v Akademii CZ.NIC uskuteční večer s Turrisem.

Co bude na programu?… více »
Miška | Komentářů: 0
dnes 18:33 | Pozvánky

Na tri dni sa hlavné mesto Slovenska po tretíkrát zmení na miesto s najväčšou koncentráciou profesionálnych programátorov, systémových administrátorov, učiteľov informatiky aj technologických nadšencov. Hlavným lákadlom bude konferencia PyCon SK 2018, určená záujemcom o Python, jeden z najpopulárnejších programovacích jazykov na svete.

… více »
RicCo386 | Komentářů: 0
dnes 18:22 | Pozvánky

Letošní ročník konference Prague PostgreSQL Developer Day se koná ve dnech 14. 2. a 15. 2. 2018. Zveřejněn byl program s přednáškami a školeními. Otevřena byla také registrace na konferenci.

TomasVondra | Komentářů: 0
dnes 11:33 | Komunita

Společnost Canonical stojící za linuxovou distribucí Ubuntu oznámila dostupnost nástroje pro týmovou spolupráci Slack (Wikipedie) ve formátu snap. Instalovat jej lze ze Snapcraftu. Slack pro Linux je dostupný také ve formátu klasických balíčků pro Ubuntu a Fedoru.

Ladislav Hagara | Komentářů: 8
včera 17:33 | Nová verze

Po roce vývoje od vydání verze 2.0 a 6 000 změnách byla vydána nová stabilní verze 3.0 softwaru, který vytváří aplikační rozhraní umožňující chod aplikací pro Microsoft Windows také pod GNU/Linuxem, Wine (Wikipedie). Z novinek lze zdůraznit například podporu Direct3D 10 a 11. Podrobnosti v poznámkách k vydání.

Ladislav Hagara | Komentářů: 14
včera 13:44 | Zajímavý projekt

V říjnu loňského roku úspěšně skončila kampaň na podporu chytrého telefonu Librem 5, jenž by měl respektovat bezpečnost, svobodu a soukromí uživatelů. Společnost Purism informuje o aktuálním vývoji tohoto telefonu. Místo plánovaného SoC i.MX6 by měl být použit úspornější i.MX8.

Ladislav Hagara | Komentářů: 3
včera 12:33 | Zajímavý projekt

V květnu loňského roku měl na YouTube premiéru krátký animovaný film Agent 327: Operation Barbershop. Blender Animation Studio včera zveřejnilo alternativní konec tohoto filmu.

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

Společnost Oracle vydala čtvrtletní bezpečnostní aktualizaci svých softwarových produktů (CPU, Critical Patch Update). Opraveno bylo celkově 237 bezpečnostních chyb. V Oracle Java SE je například opraveno 21 bezpečnostních chyb. Vzdáleně zneužitelných bez autentizace je 18 z nich. V Oracle MySQL je opraveno 25 bezpečnostních chyb. Vzdáleně zneužitelných bez autentizace je 6 z nich.

Ladislav Hagara | Komentářů: 0
17.1. 20:55 | Komunita

Linux ve VirtualBoxu nebude potřebovat Přídavky pro hosta (Guest Additions). Budou součástí linuxového jádra. Ovladač vboxguest by se měl dostat do Linuxu 4.16. Ovladač vboxsf by měl následovat.

Ladislav Hagara | Komentářů: 24
17.1. 17:11 | Komunita

Vývojáři Thunderbirdu žádají o vyplnění dotazníku. Upřednostňujete klasický vzhled nebo raději Monterail (GitHub)?

Ladislav Hagara | Komentářů: 22
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (7%)
 (1%)
 (1%)
 (1%)
 (77%)
 (13%)
Celkem 1336 hlasů
 Komentářů: 53, poslední 17.1. 16:55
    Rozcestník

    Dotaz: select() a roura

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

    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);
    
    Martin Tůma avatar 10.4.2005 12:30 Martin Tůma | skóre: 38 | 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.