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 02:44 | Nová verze

Byl vydán Sway ve verzi 0.14. Přehled opravených chyb, změn a novinek v nejnovější verzi tohoto dlaždicového (tiling) správce oken pro Wayland kompatibilního s i3 na GitHubu. Do vývoje se zapojilo 12 vývojářů [reddit].

Ladislav Hagara | Komentářů: 0
včera 22:33 | Nová verze

Byla vydána verze 4.0 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata (Wikipedie). Přehled novinek v poznámkách k vydání a v aktualizované dokumentaci. Ve dnech 15. až 17. listopadu proběhne v Praze konference vývojářů a uživatelů Suricaty SuriCon 2017.

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

Byla vydána dvaadvacátá alfa verze svobodné historické realtimové strategie 0 A.D. (Wikipedie). Kódový název této nejnovější verze je Venustas. Představení novinek také na YouTube.

Ladislav Hagara | Komentářů: 3
včera 11:33 | Zajímavý článek

Radek Vokál v článku Boltron – náhled modulárního operačního systému (en) na MojeFedora.cz představuje a informuje o možnosti vyzkoušet si Boltron, prototyp modulární distribuce. Pro Fedoru 26 je k dispozici testovací docker kontejner, který obsahuje modifikovanou verzi správce balíčků DNF, který na pozadí pracuje s moduly.

Ladislav Hagara | Komentářů: 3
včera 07:00 | Nová verze

ZFS on Linux, tj. implementace OpenZFS (Wikipedie) na Linuxu, byl vydán ve verzi 0.7.0. Přehled novinek v diskusním listu zfs-announce nebo na GitHubu. Nejnovější ZFS on Linux je kompatibilní s Linuxem 2.6.32 až 4.12.

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

V Las Vegas končí bezpečnostní konference Black Hat USA 2017 (Twitter) a začíná bezpečnostní konference DEF CON 25 (Twitter). V rámci Black Hat budou vyhlášeny výsledky letošní Pwnie Awards (Twitter). Pwnie Awards oceňují to nejlepší, ale i to nejhorší z IT bezpečnosti (bezpečnostní Oscar a Malina v jednom). V kategorii "Lamest Vendor Response" byl například nominován také Lennart Poettering za jeho přístup k řešení bezpečnostních chyb v systemd, viz například chyba s uživatelem 0day.

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

Nitay Artenstein z Exodus Intelligence se v příspěvku na blogu společnosti podrobně věnuje bezpečností chybě Broadpwn (CVE-2017-9417). Její analýzu provedl také Zhuowei Zhang na blogu Booster Ok. Jedná se o chybu ve firmwaru Wi-Fi chipsetů BCM43xx od Broadcomu. Útočník může vzdáleně získat kontrolu nad zařízením. Chyba byla již opravena v macOS, iOS i Androidu [Hacker News].

Ladislav Hagara | Komentářů: 4
26.7. 22:55 | IT novinky

Intel končí s vývojovými deskami Joule, Edison, Galileo a také s Arduino 101 a Curie.

Ladislav Hagara | Komentářů: 1
26.7. 14:44 | Nová verze

Byla vydána nová verze 42.3 linuxové distribuce openSUSE Leap. Jedná se už o třetí vydání, které staví na SUSE Linux Enterprise (SLE). Výchozím jádrem je opět poslední LTS verze, tedy řada 4.4. Podrobnosti v oznámení o vydání a v poznámkách k vydání.

Ladislav Hagara | Komentářů: 16
26.7. 14:30 | Nová verze

Google Chrome 60 byl prohlášen za stabilní. Nejnovější stabilní verze 60.0.3112.78 tohoto webového prohlížeče přináší řadu oprav a vylepšení. Vylepšeny byly také nástroje pro vývojáře (YouTube). Opraveno bylo 40 bezpečnostních chyb.

Ladislav Hagara | Komentářů: 0
Těžíte nějakou kryptoměnu?
 (5%)
 (2%)
 (20%)
 (74%)
Celkem 133 hlasů
 Komentářů: 8, poslední včera 21:30
    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.