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:11 | Komunita

Na Humble Bundle lze získat hororovou počítačovou hru Outlast (Wikipedie) běžící také v Linuxu zdarma. Speciální akce končí v sobotu v 19:00.

Ladislav Hagara | Komentářů: 0
dnes 10:33 | Humor

Mozilla.cz upozorňuje na Knihu Mozilly (Wikipedie), tj. velikonoční vajíčko ve Firefoxu. Zobrazit jej lze zadáním about:mozilla do adresního řádku. Aktuální verze Firefoxu obsahuje proroctví 15:1 "Dvojčata Mamonu se rozhádala a jejich souboje uvrhly svět do nové tmy. Zvířeti se ale tma hnusila. A tak se stalo mrštnější a silnější, šlo vpřed a jeho počty rostly. A zvíře přineslo oheň a světlo do tmy". Firefox 57 bude obsahovat proroctví 11:14. To je zatím jenom v angličtině. Pomoci lze s překladem do češtiny.

Ladislav Hagara | Komentářů: 4
dnes 01:22 | Zajímavý projekt
Před měsícem byla spuštěna kampaň na podporu chytrého telefonu Librem 5, jenž by měl respektovat bezpečnost, svobodu a soukromí uživatelů. Cílem kampaně je vybrat alespoň milion a půl dolarů. Aktuálně je vybráno přes 600 000 dolarů, tj. 40 %. Kampaň poběží ještě další měsíc. Podporu projektu oznámilo KDE i GNOME.
Ladislav Hagara | Komentářů: 15
dnes 00:55 | Komunita

Agentura DISA (Defense Information Systems Agency) publikovala (pdf) Ubuntu 16.04 Security Technical Implementation Guide (STIG) (zip), tj. doporučené bezpečnostní nastavení Ubuntu 16.04. Ubuntu se tak dostalo mezi unixové operační systémy a linuxové distribuce AIX, HP-UX, Oracle Linux, Red Hat a Solaris [reddit].

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

CSIRT.CZ informuje, že byly vydány nové bezpečnostní aktualizace, které opravují několik zranitelných míst v Sambě. Útočník může využít zranitelnosti s cílem získání přístupu k potenciálně citlivých informací. Uživatelům a správcům je doporučeno, aby zkontrolovali bezpečnostní opatření pro CVE-2017-12150, CVE-2017-12151 a CVE-2017-12163 a provedli potřebné aktualizace.

Ladislav Hagara | Komentářů: 0
včera 21:44 | Komunita

Společnost Red Hat aktualizovala svůj slib ohledně softwarových patentů. Slib nově zahrnuje i open source software pod permisivními licencemi.

Ladislav Hagara | Komentářů: 0
včera 08:55 | Komunita

Do 22. září probíhá v Mountain View konference XDC2017 (X.Org Developer's Conference). Na programu je řada zajímavých přednášek. Sledovat je lze online. K dispozici je záznam přednášek ze včerejšího dne.

Ladislav Hagara | Komentářů: 0
20.9. 17:33 | Nová verze

Byla vydána nová stabilní verze 1.12 (1.12.955.36) webového prohlížeče Vivaldi (Wikipedie). Z novinek vývojáři zdůrazňují možnost zobrazení metadat u digitálních fotografií, vylepšený panel stahování a omezení sytosti barvy zdůraznění (YouTube). Nejnovější Vivaldi je postaveno na Chromiu 61.0.3163.91.

Ladislav Hagara | Komentářů: 39
20.9. 10:55 | Nová verze

Byla vydána verze 4.0 programovacího jazyka Swift (Wikipedie). Zdrojové kódy jsou k dispozici na GitHubu. Ke stažení jsou oficiální binární balíčky pro Ubuntu 16.10, Ubuntu 16.04 a Ubuntu 14.04.

Ladislav Hagara | Komentářů: 5
19.9. 23:33 | Zajímavý software

MojeFedora informuje, že PipeWire byl oficiálně oznámen (en). PipeWire bude zprostředkovávat aplikacím jednotný přístup k audiu a videu. Jedním z hlavních důvodů je možnost izolovat aplikace od audio a video zdrojů. Aplikace nebudou mít přímý přístup k hardwaru, ale budou se muset ptát multimediálního serveru PipeWire, který jim je na základě nastavených oprávnění poskytne nebo ne. V budoucnu by měl PipeWire nahradit PulseAudio.

Ladislav Hagara | Komentářů: 34
Těžíte nějakou kryptoměnu?
 (5%)
 (3%)
 (17%)
 (75%)
Celkem 553 hlasů
 Komentářů: 22, poslední 29.8. 11:23
    Rozcestník

    Dotaz: komunikace s FIFO a poll()

    21.2.2010 13:46 ext3fs
    komunikace s FIFO a poll()
    Přečteno: 225×
    Dobry den, hraji si ted s komunikaci pres FIFO v C a stale mi program stoji u read() a bere veskere CPU. Zde je maly priklad:

    master proces:
    int main(void)
    {             
    int pipe_fd;  
    int ret;      
    int n;        
    struct pollfd ufds[1];
    char buff[32];        
    
            pipe_fd = mkfifo("./pipe",660);
    
            pipe_fd = open("./pipe", O_RDONLY | O_NONBLOCK, 660);
    
            ufds[0].fd = pipe_fd;
            ufds[0].events = POLLIN;
            ufds[0].revents = 0;    
    
            while(1)
            {
                    ret = poll(ufds, 1, 1000);
    
                    if (ret == -1)
                    {
                            printf("poll error\n");
                            close (pipe_fd);
                            exit (1);
                    }
                    else if (ret == 0)
                            printf("no data...\n");
                    else
                    {
                            if (ufds[0].revents == POLLIN)
                            {
                                    do
                                    {
                                        n = read(pipe_fd, buff, 32);
                                        if (n == -1)
                                        {
                                            printf("read error\n");
                                            break;
                                        }
                                        else
                                            printf("recv (%d)\n",n);
                                    } while (n != 0);
                            }
                    }
            }
    
            close(pipe_fd);
    
            return(0);
    }
    
    slave proces:
    int main(void)
    {
    int pipe_fd;
    char buff[32];
    
            pipe_fd = open("./pipe",O_WRONLY | O_NONBLOCK ,660);
    
            strcpy(buff, "ahoj");
    
            write(pipe_fd, buff, 5);
    
            close(pipe_fd);
    
            return(0);
    
    }
    
    Nevite kde je problem? Dekuji.

    Odpovědi

    21.2.2010 14:09 Jirka P
    Rozbalit Rozbalit vše Re: komunikace s FIFO a poll()
    Dost ti tam chybí ošetření chyb, takže:

    - proč otvíráš rouru pro zapisování s O_NONBLOCK, ale neošetřuješ situaci, kdy druhý konec roury není otevřený (vrátí to chybu)

    - když otevřeš rouru pro čtení s O_NONBLOCK bez otevřeného protějšku, roura se sice otevře, ale čtení bude pořád vracet 0 (a tedy bude roura pořád připravena pro čtení z hlediska select() nebo poll()

    Doporučil bych vykašlat se na O_NONBLOCK a důsledně ošetřit všechny chyby, včetně konce čtení. Pak by to mělo fungovat.
    21.2.2010 14:23 ext3fs
    Rozbalit Rozbalit vše Re: komunikace s FIFO a poll()
    Priklad je jen ilustrativni a opravdu jsem tam osetreni neresil.

    V podstate jde o to, ze master proces (daemon) bezi stale a mimo ostatni funkce se obcas zepta roury zda tam nema data od slave procesu, ktery se spousti jen pro zadavani prikazu daemonu (tedy velmi malo casto). Takze nejprve se stejne roura otevira pro cteni.
    21.2.2010 15:35 ext3fs
    Rozbalit Rozbalit vše Re: komunikace s FIFO a poll()
    Problem je take v tom, ze pokud oteviram rouru bez priznaku O_NDELAY nebo O_NONBLOCK, tak se proces zastavi (dle strace) na open() a ceka na otevreni druheho konece coz je v mem pripade nezadouci. Jak tohle osetrit bez pouziti O_NDELAY nebo O_NONBLOCK?
    21.2.2010 16:41 Jirka P
    Rozbalit Rozbalit vše Re: komunikace s FIFO a poll()
    Pokud vím, tak něco jako select() na podmínku "někdo jiný otevřel rouru a já z ní tedy můžu číst" neexistuje. Popsané chování open() je normální, bez O_NONBLOCK se oba procesy rozběhnou až potom, co jsou oba konce otevřeny.

    Sice to považuji za prasárnu, ale doporučil bych v tom master (čtecím) procesu otevřít tu rouru O_RDWR, bez O_NONBLOCK. To se povede vždycky, na nic to nečeká a můžete pak čekat select()em na data, která do ní někdo zapíše (samozřejmě do ní v master procesu zapisovat nebudete).
    21.2.2010 17:12 ext3fs
    Rozbalit Rozbalit vše Re: komunikace s FIFO a poll()
    Funguje to, ale pouze s otevrenim pro cteni a s priznakem O_NONBLOCK, jinak to stale stalo na read() i po prijeti dat a ukonceni slave procesu.
    Fuky avatar 21.2.2010 20:12 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: komunikace s FIFO a poll()
    do
    {
    
    // Tady Ti chybí poll() nebo select(), který musíš použít vždy, 
    // když máš file descriptor otevřený v neblokujícím režimu,
    // jelikož ho tam nemáš fce read() je okamžitě opuštěna a proto
    // Ti to "žere" procesor
    
        n = read(pipe_fd, buff, 32);
        if (n == -1)
        {
            printf("read error\n");
            break;
        }
        else
            printf("recv (%d)\n",n);
    } while (n != 0);
    

    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.