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 05:44 | IT novinky

    Společnost Purism stojící za linuxovými telefony a počítači Librem má nově v nabídce postkvantový šifrátor Librem PQC Encryptor.

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

    VirtualBox, tj. multiplatformní virtualizační software, byl vydán v nové verzi 7.2. Přehled novinek v Changelogu. Vypíchnou lze vylepšené GUI.

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

    Eric Migicovsky, zakladatel společnosti Pebble, v lednu oznámil, že má v plánu spustit výrobu nových hodinek Pebble s již open source PebbleOS. V březnu spustil předprodej hodinek Pebble Time 2 (tenkrát ještě pod názvem Core Time 2) za 225 dolarů s dodáním v prosinci. Včera představil jejich konečný vzhled (YouTube).

    Ladislav Hagara | Komentářů: 2
    včera 12:44 | Zajímavý software

    Byla oznámena nativní podpora protokolu ACME (Automated Certificate Management Environment) ve webovém serveru a reverzní proxy NGINX. Modul nginx-acme je zatím v preview verzi.

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

    Vývojáři KDE oznámili vydání balíku aplikací KDE Gear 25.08. Přehled novinek i s náhledy a videi v oficiálním oznámení.

    Ladislav Hagara | Komentářů: 0
    13.8. 11:55 | IT novinky

    Společnost Perplexity AI působící v oblasti umělé inteligence (AI) podala nevyžádanou nabídku na převzetí webového prohlížeče Chrome internetové firmy Google za 34,5 miliardy dolarů (zhruba 723 miliard Kč). Informovala o tom včera agentura Reuters. Upozornila, že výše nabídky výrazně převyšuje hodnotu firmy Perplexity. Společnost Google se podle ní k nabídce zatím nevyjádřila.

    Ladislav Hagara | Komentářů: 5
    13.8. 04:33 | Bezpečnostní upozornění

    Intel vydal 34 upozornění na bezpečnostní chyby ve svých produktech. Současně vydal verzi 20250812 mikrokódů pro své procesory řešící 6 bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 0
    13.8. 04:22 | Nová verze

    Byla vydána nová verze 1.25 programovacího jazyka Go (Wikipedie). Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 1
    12.8. 13:44 | Nová verze

    Byla vydána beta verze Linux Mintu 22.2 s kódovým jménem Zara. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze novou XApp aplikaci Fingwit pro autentizaci pomocí otisků prstů nebo vlastní fork knihovny libAdwaita s názvem libAdapta podporující grafická témata. Linux Mint 22.2 bude podporován do roku 2029.

    Ladislav Hagara | Komentářů: 0
    12.8. 13:00 | IT novinky

    Provozovatel internetové encyklopedie Wikipedie prohrál v Británii soudní spor týkající se některých částí nového zákona o on-line bezpečnosti. Soud ale varoval britského regulátora Ofcom i odpovědné ministerstvo před zaváděním přílišných omezení. Legislativa zpřísňuje požadavky na on-line platformy, ale zároveň čelí kritice za možné omezování svobody slova. Společnost Wikimedia Foundation, která je zodpovědná za fungování

    … více »
    Ladislav Hagara | Komentářů: 2
    Kolik tabů máte standardně otevřeno ve web prohlížeči?
     (52%)
     (19%)
     (4%)
     (5%)
     (3%)
     (1%)
     (1%)
     (17%)
    Celkem 393 hlasů
     Komentářů: 23, poslední 4.8. 13:01
    Rozcestník

    Dotaz: write() zpusobi stale vyvolavani SIGIO

    22.10.2011 01:20 atmel8051
    write() zpusobi stale vyvolavani SIGIO
    Přečteno: 183×
    Zdravim, pisu program kterej komunikuje po seriove lince. Prijem dat funguje korektne, ovsem pri zapisu - write() dojde k preruseni SIGIO,ktere se opakuje stale dokola. Potrebuji vsak aby k preruseni programu doslo pouze pri prichodu dat. Je to muj prvni program kde vyuzivam signalu a nevim jak na to. Za kazdou radu budu moc rad.

    kousek kodu:
    //otevreni seriaku
        fd=open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NONBLOCK); //zajisteni spojeni mezi soub.deskript. a komun. portem
        if(fd<0){
            printf("\033[38mProblem pri otevirani serioveho portu.\033[0m\n\n");
            perror("/dev/ttyUSB0");
            return(1);
        }
        printf("\033[32mSeriovy port otevren v poradku.\033[0m\n");
    
        saio.sa_handler = funkce_pri_preruseni;
        sigemptyset(&saio.sa_mask);
        saio.sa_flags = 0;
        saio.sa_restorer = NULL;
        sigaction(SIGIO,&saio,NULL);                
    
        //povolit procesu prijmout SIGIO
        fcntl(fd, F_SETOWN, getpid());
        fcntl(fd, F_SETFL,O_NONBLOCK |  FASYNC); /
    
        tcgetattr(fd,&oldtio); //zaloha puvodniho nastaveni portu
        //nastaveni portu - Canonnical Input - radek ukoncen znakem ASCII LF
        newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
        newtio.c_iflag = IGNPAR | ICRNL;
        newtio.c_oflag = 0;
    //    newtio.c_lflag = ICANON;
        newtio.c_cc[VMIN]=1;
        newtio.c_cc[VTIME]=0;
        tcflush(fd, TCIFLUSH);
        tcsetattr(fd,TCSANOW,&newtio);
    
        write(fd,.....
    

    Odpovědi

    Bluebear avatar 22.10.2011 12:22 Bluebear | skóre: 30 | blog: Bluebearův samožerblog | Praha
    Rozbalit Rozbalit vše Re: write() zpusobi stale vyvolavani SIGIO
    Myslím, že problém je tady:

    fcntl(fd, F_SETFL,O_NONBLOCK | FASYNC);

    Nastavením O_ASYNC žádáš, aby jádro poslalo SIGIO pokaždé, když je deskriptor připraven přijímat nebo dodat data; drtivou většinu SIGIO dostáváš proto, že deskriptor hlásí připravenost k přijetí dalších dat.

    Jiná otázka je, co s tím :-) Bohužel nevím o tom, že by šlo nastavit přijetí signálu jen při přijetí nových dat. Zdá se mi, že ti nezbyde buď při každém SIGIO ověřit stav deskriptoru a zjistit, která z těch situací nastala (select(), poll() nebo něco podobného), nebo, podle aplikace, nechat signály koňovi a používat místo nich select() nebo poll() rovnou.

    (Upozorňuji, že jsem odpůrce konceptu signálů, které jsou podle mne užitečné jen pro hlášení kritických situací, takže můj pohled je poněkud ovlivněn. :-) )
    To mi připomíná, jak jsem si pořídil květináč, že v něm budu mít květinu. Opravdu tam byla, ale potom být přestala...
    Josef Kufner avatar 22.10.2011 14:41 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: write() zpusobi stale vyvolavani SIGIO
    Jo, taky bych to viděl spíš na použití select(). Ono tím, že vše béží v jedné smyčce a nikam se z ní neutíká, je vše takové přehlednější a líp se to ladí.
    Hello world ! Segmentation fault (core dumped)

    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.