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 21:22 | Nová verze

    Bylo vydáno Eclipse IDE 2025-09 aneb Eclipse 4.37. Představení novinek tohoto integrovaného vývojového prostředí také na YouTube.

    Ladislav Hagara | Komentářů: 0
    včera 18:22 | IT novinky

    T-Mobile od 15. září zpřístupňuje RCS (Rich Communication Services) zprávy i pro iPhone.

    Ladislav Hagara | Komentářů: 1
    včera 13:22 | IT novinky

    Společnost ARM představila platformu Arm Lumex s Arm C1 CPU Cluster a Arm Mali G1-Ultra GPU pro vlajkové chytré telefony a počítače nové generace.

    Ladislav Hagara | Komentářů: 0
    včera 05:44 | Nová verze

    Unicode Consortium, nezisková organizace koordinující rozvoj standardu Unicode, oznámila vydání Unicode 17.0. Přidáno bylo 4 803 nových znaků. Celkově jich je 159 801. Přibylo 7 nových Emoji.

    Ladislav Hagara | Komentářů: 0
    9.9. 21:00 | IT novinky Ladislav Hagara | Komentářů: 10
    9.9. 18:33 | Nová verze

    Realtimová strategie Warzone 2100 (Wikipedie) byla vydána ve verzi 4.6.0. Podrobný přehled novinek, změn a oprav v ChangeLogu na GitHubu. Nejnovější verzi Warzone 2100 lze již instalovat také ze Snapcraftu a Flathubu.

    Ladislav Hagara | Komentářů: 1
    9.9. 12:22 | IT novinky

    Polské vývojářské studio CD Projekt Red publikovalo na Printables.com 3D modely z počítačové hry Cyberpunk 2077.

    Ladislav Hagara | Komentářů: 1
    9.9. 11:44 | Pozvánky

    Organizátoři konference LinuxDays 2025 vydali program a zároveň otevřeli registrace. Akce se uskuteční 4. a 5. října na FIT ČVUT v pražských Dejvicích, kde vás čekají přednášky, workshopy, stánky a spousta šikovných lidí. Vstup na akci je zdarma.

    Petr Krčmář | Komentářů: 7
    8.9. 22:00 | IT novinky

    Uživatelé komunikátoru Signal si mohou svá data přímo v Signalu bezpečně zálohovat a v případě rozbití nebo ztráty telefonu následně na novém telefonu obnovit. Zálohování posledních 45 dnů je zdarma. Nad 45 dnů je zpoplatněno částkou 1,99 dolaru měsíčně.

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

    Server Groklaw, zaměřený na kauzy jako právní spory SCO týkající se Linuxu, skončil před 12 lety, resp. doména stále existuje, ale web obsahuje spam propagující hazardní hry. LWN.net proto v úvodníku připomíná důležitost zachovávání komunitních zdrojů a upozorňuje, že Internet Archive je také jen jeden.

    🇵🇸 | Komentářů: 29
    Pro otevření více webových stránek ve webovém prohlížečí používám
     (83%)
     (7%)
     (2%)
     (2%)
     (4%)
     (2%)
    Celkem 161 hlasů
     Komentářů: 12, poslední včera 13:00
    Rozcestník

    Administrace komentářů

    Jste na stránce určené pro řešení chyb a problémů týkajících se diskusí a komentářů. Můžete zde našim administrátorům reportovat špatně zařazenou či duplicitní diskusi, vulgární či osočující příspěvek a podobně. Děkujeme vám za vaši pomoc, více očí více vidí, společně můžeme udržet vysokou kvalitu AbcLinuxu.cz.

    Příspěvek
    1.9.2020 21:34 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: Využítí pipe v C
    Napadlo vás někdy, že syscally z strace jsou interní implementační detail, který se může a nemusí promítnout do výsledného chování toho API v C? ;-)

    A napadlo někdy vás, že jste prostě jen měl štěstí a zdědil SA_RESTART flag od bashe?

    Vaříte z vody. Už zase jste to totiž nedočetl:

    A child created via fork(2) inherits a copy of its parent's signal dispositions. 
    During an execve(2), the dispositions of handled signals are reset to the default; the dispositions of ignored signals are left unchanged.
    

    S tím čtením prostě nemůžete skončit v půlce, po první větě. :-D Je třeba to dočíst.

    Nebo, když už v tom tápete, můžete si to přece snadno vyzkoušet, ne? Tak, jestlipak se SA_RESTART dědí?

    #define _POSIX_C_SOURCE 200809L
    #include <signal.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    
    static void print_sigaction(const char* name,
                                const struct sigaction* sa) {
      printf("%s %s SA_RESTART\n",
             name,
             sa->sa_flags & SA_RESTART ? "has" : "doesn't have");
    }
    
    static void useless(int sig) {
      puts(strsignal(sig));
    }
    
    int main(int argc, char* const* argv) {
      struct sigaction old_sa;
      if (argc == 1) {  // BEFORE exec
        const struct sigaction new_sa = {
          .sa_handler = useless,
          .sa_flags = SA_RESTART,
        };
        if (sigaction(SIGWINCH, &new_sa, &old_sa) == -1) {
          perror(argv[0]);
          return EXIT_FAILURE;
        }
        print_sigaction("old sigaction BEFORE exec", &old_sa);
        print_sigaction("new sigaction BEFORE exec", &new_sa);
        char* const one_empty[] = {argv[0], "", NULL};
        if (execv(argv[0], one_empty) == -1) {
          perror(argv[0]);
          return EXIT_FAILURE;
        }
      } else if (argc == 2) {  // AFTER exec
        if (sigaction(SIGWINCH, NULL, &old_sa)) {
          return EXIT_FAILURE;
        }
        print_sigaction("old sigaction AFTER exec", &old_sa);
      } else {
        return EXIT_FAILURE;
      }
      return EXIT_SUCCESS;
    }
    

    Kvízová otázka za 10 bodů: Co tohle^^^ vypíše?

    old sigaction BEFORE exec doesn't have SA_RESTART
    new sigaction BEFORE exec has SA_RESTART
    old sigaction AFTER exec doesn't have SA_RESTART
    

    Pro příště: Nevymýšlejte si, prosím, ptákoviny. :-) Ptákoviny (jako že se dědí SA_RESTART) se snadno vymýšlejí, ale obtížně vyvracejí, protože to můžou být přece jen okrajové případy a signal disposition může znít příliš vágně. Příští tvrzení tohoto druhu bych prosil s manuálovou stránkou (bez vynechaného kontextu) a se snippetem, který to ukazuje. ;-)

    Nemám. Takže nejenom střílíte od pasu, ale ani tu manuálovou stránku jste si nepřečetl.

    Četl - a na rozdíl od vás dostatečně pozorně. Zkusme začít s read(3p), tj. oficiální posixovou dokumentací:

    EINTR The read operation was terminated due to the receipt of a signal, and no data was transferred.

    Ať čtu, jak čtu, žádné slovo "handler", bez ohledu na tučnost nebo velikost, tam není.

    Takže ani tu POSIXovou stránku neinterpretujete správně, jak jste se koneckonců už sám přesvědčil experimentem, že? :-)

    Tentokrát vám unikl přesný význam pojmu receipt of a signal; do této kategorie se implicitní akce Ign nepočítá.

    Výmluvné jsou také některé kousky textu, které najdete v man 7 signal:

    Interruption of system calls and library functions by signal handlers
        If a signal handler is invoked while a system call or library function call is blocked, then either:
        ...
    

    Klíčová slova: handler, invoked

    No a když se podíváme na read(2), tedy linuxovou verzi:

    EINTR The call was interrupted by a signal before any data was read; see signal(7).

    Tedy najednou má specifická linuxová verze (o které jste se už sám přesvědčil, že je nepřesná) přednost? Jenže o pár komentářů výše jste napsal toto:

    Jestli chcete psát své programy tak, aby byla funkčnost závislá na tom, že vždy poběží na systému, který bude nastavovat flagy přesně tak, jako ten jeden, na kterém jste si to empircky vyzkoušel…

    Aha? Jenže najednou má podle vás linuxová verze manuálové stránky jakousi váhu? Nezměnil jste nějak rychle názor, doslova obratem? :-D

    Zase žádné handler, bez ohledu na font. V signal(7) sice slovo handler je, ale z kontextu je zřejmé, že tím není myšlen pouze vlastní handler, který by si proces zaregistroval pomocí signal() nebo sigaction(), ale handler obecně, což zahrnuje i případ ignorovaného signálu.

    Proto jsou ty POSIXové stránky většinou lepší než linuxové. Rozlišují velmi důsledně pojmy action, handler a signal. To jsou velmi důležité nuance.

    Upřímně řečeno, já jsem opravdu (ale opravdu (ale opravdu ...)) ten poslední, komu má smysl cpát tohle profláknuté EINTR-náboženství. Jsem na něj alergický hlavně proto, že zbytečné rádoby-ošetření EINTR vyhazuju z kódu už asi tak dekádu. Vyhazuju to vidlema. Vyhazuju to oknem. Vyhazuju to vraty. Splachuju to do hajzlu. Ale ono se to vždycky vrátí komínem, protože někdo (už zase) nepochopil, že POSIX je navržený tak, aby se s tím API snadno / rychle / korektně programovalo, nikoliv tak, aby se člověk musel na 50 řádcích věnovat ošetření signálů, než si přečte jeden soubor.

    V tomto formuláři můžete formulovat svou stížnost ohledně příspěvku. Nejprve vyberte typ akce, kterou navrhujete provést s diskusí či příspěvkem. Potom do textového pole napište důvody, proč by měli admini provést vaši žádost, problém nemusí být patrný na první pohled. Odkaz na příspěvek bude přidán automaticky.

    Vaše jméno
    Váš email
    Typ požadavku
    Slovní popis
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.