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 13:33 | Zajímavý software

Společnost Google na svém blogu věnovaném open source představila container-diff, nástroj pro analýzu a porovnávání Docker kontejnerů. Zdrojové kódy jsou k dispozici pod licencí Apache 2.0.

Ladislav Hagara | Komentářů: 0
dnes 08:00 | Komunita

Flatpak Workshop proběhne ve středu 29. listopadu od 10:00 v Brně. V dopolední přednáškové části se účastníci seznámí s Flatpakem, se specifiky pro aplikace napsané v Qt a GTK+, portály, které integrují aplikace do systému, a na závěr, jak dostat aplikaci do Flathubu, což je momentálně největší centralizovaný repozitář Flatpaků. V odpolední části si pak mohou za pomoci lektorů zkusit nějakou aplikaci zabalit pro Flatpak. Workshop je určen pro 20 účastníků. Nutná je registrace.

Ladislav Hagara | Komentářů: 4
dnes 07:00 | Zajímavý článek

Software Freedom Law Center a Software Freedom Conservancy jsou organizace zaměřené na podporu svobodných/open-source projektů: SFLC poskytuje právní konzultace, SFC mj. také zázemí. SFC upozornila, že ze strany SFLC vůči ní proběhly právní kroky směřující k odebrání obchodní známky. SFLC v reakci tvrdí, že se jedná o logický krok, protože obchodní známky jsou si podobné, a SFC dlouhodobě nekooperuje. Brian Lunduke situaci shrnuje včetně ohlasů Neila McGoverna a Matthewa Garretta. Podle nich je Eben Moglen ze SFLC v konfliktu se zájmy komunity.

Fluttershy, yay! | Komentářů: 2
dnes 06:00 | Komunita

MariaDB Foundation, nadace stojící za vývojem open source relační databáze MariaDB, oznámila, že Microsoft se stal jejím členem a platinovým sponzorem. Cílem Microsoftu je optimalizace MariaDB pro cloudovou platformu Microsoft Azure.

Ladislav Hagara | Komentářů: 0
16.11. 23:44 | IT novinky

Společnosti Dell a Canonical společně představily 5 nových počítačů Dell Precision s předinstalovaným Ubuntu. Jedná se o 4 notebooky a 1 all-in-one počítač. Cena počítačů s Ubuntu je o 100 dolarů nižší než jejich cena s Windows 10.

Ladislav Hagara | Komentářů: 14
16.11. 22:55 | Nová verze

Po pěti měsících vývoje od vydání verze 4.8 byla vydána nová verze 4.9 svobodného open source redakčního systému WordPress. Kódové označením Tipton bylo vybráno na počest amerického jazzového muzikanta a kapelníka Billyho Tiptona.

Ladislav Hagara | Komentářů: 0
16.11. 22:11 | Pozvánky

Spolek OpenAlt zve příznivce otevřených technologií a otevřeného přístupu na 146. brněnský sraz, který proběhne v pátek 17. listopadu od 18:00 hodin v restauraci Bogota na Nových Sadech.

Ladislav Hagara | Komentářů: 0
16.11. 21:55 | Nová verze

Dle plánu byla vydána nová verze 9.2.1 živé linuxové distribuce Slax. Novinkou je především přechod ze Slackware na Debian a z KDE na Fluxbox.

Ladislav Hagara | Komentářů: 3
15.11. 22:44 | Zajímavý projekt

Vítězným projektem letošního ročníku soutěže určené vývojářům open source hardwaru Hackaday Prize se stal podvodní kluzák (YouTube, Onshape). Cenu za nejlepší produkt získala braillská klávesnice pro chytré telefony Tipo (YouTube).

Ladislav Hagara | Komentářů: 0
15.11. 06:33 | Nová verze

Byla vydána verze 3.3 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Řešena je také řada bezpečnostních problémů.

Ladislav Hagara | Komentářů: 3
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (9%)
 (1%)
 (1%)
 (1%)
 (74%)
 (14%)
Celkem 697 hlasů
 Komentářů: 36, poslední 17.11. 18:43
    Rozcestník

    Dotaz: fork()

    26.2.2008 12:46 pepa
    fork()
    Přečteno: 509×
    DD,

    mam nasledujici kod
    int main(void){
      pid_t id;
      printf("tento text se vypíše dvakrát");
      if ((id = fork()) == 0) { /* synovský proces */
        putchar('\n');
      } else
        if (id > 0) { /* otcovský proces */
      putchar('\n');
      } else {
       perror("fork"); return 1; /* chyba při fork() */
      }
      return 0;
    }
    
    chtel bych vedet, jaktoze se funkce printf provede 2x? moje myslenka je, ze po vytvoreni procesu jak parent tak child pokracuji dale v programu.

    Odpovědi

    26.2.2008 12:50 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: fork()
    Ne. V procesu potomka se provádí až to, co následuje za návratem z fork().
    26.2.2008 18:51 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: fork()
    Omlouvám se. Moje odpověď je sice správná, ale na jinou otázku. Nevšiml jsem se, že se neptáte, jestli se ta funkce volá dvakrát, ale proč se zdá, jako by se volala dvakrát.
    26.2.2008 13:48 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: fork()
    Tak tohle je dost dobrej vtip :-) (ne jako že si děláš srandu, ale že je to zajímavý chování)

    Standardní výstup je jako normální soubor. Zapisuje se do něj pomocí volání syscallu kernelu. To je ovšem drahý, takže se to, co se má vypsat, nejdřív cachuje do paměti a až potom se to najednou vypíše. Funce libc, které pracují s FILE*, prostě nejdřív cachují do paměti a až když tam pošleš znak konce řádku, tak se to odpálí syscallem do kernelu. (Proto taky ty funkce pracují se strukturou FILE a ne rovnou s číselným deskriptorem.)

    Takže co se stane - do té cache uložíš ten text, ale ten se ve skutečnosti nikam nevypíše. Pak rozmnožíš ten proces, takže teď každý proces má svou vlastní verzi cache s tím textem. A v obou procesech ji celou odpálíš tím znakem '\n'.

    Je to evidentní z výpisu programu strace -f.
    26.2.2008 13:51 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: fork()
    Řešení: za printf vložit fflush(stdout); nebo dát do printf znak konce řádku (\n).
    26.2.2008 19:10 kvido
    Rozbalit Rozbalit vše Re: fork()
    Ono je to evidentní spíš z manuálové stránky, kterou bych rozhodně každému doporučil k prostudování, než se do forkování pustí. Je to méně bolestné, než podrobnosti zjišťovat "za běhu", což říkám z vlastní zkušenosti.
    27.2.2008 07:14 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: fork()
    man stdout? Číst zrovna tuhle manuálovou stránku by mě na jeho místě asi taky nenapadlo. I když úplně nejlepší je si přečíst všechny manuálový stránky :-)
    27.2.2008 08:44 kvido
    Rozbalit Rozbalit vše Re: fork()
    Překvapivě man fork :-). Stejné chování může nastat pro libovolný soubor, nejde o žádnou specialitu stdout.
    27.2.2008 10:33 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: fork()
    V mé debianní man fork toho moc není. Že při forku se používá copy-on-write se tam píše, ale že se data před zápisem souboru cachují, že té cow metodě podléhá i ta cache a že to může dělat takové chyby se tam nepíše, což je myslím si přesně ta informace, kterou tazatel potřeboval vědět. I to, že zděděné filedeskriptory sdílejí informaci o pozici v souboru se v manuálových stránkách píše taky bůhví kde. Když chci programovat pro Linux, tak prostě nestačí tipnout si název příkazu a přečíst si jen jeho man stránku, bohužel.
    27.2.2008 10:39 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: fork()
    (Samozřejmě je blbost, aby se man fork zabývala všemi detaily I/O a ostatních subsystémů jenom proto, že se to dá forknout. Jenom chci prostě říct, že to v man fork není :-) A poslední větu nemyslím nijak útočně a ani proti někomu.)
    27.2.2008 11:09 kvido
    Rozbalit Rozbalit vše Re: fork()
    Pokud chci interpretovat informaci o kopírování file deskriptorů, musím vědět, co to je file deskriptor a jak se používá, jinak má taková informace samozřejmě zanedbatelnou hodnotu. Takže jitě, jen manuálová stránka fork nestačí, pokud neznám vše, co se v ní odkazuje.

    Já jsem původně hlavně reagoval na to, že mechanismus "dvojitého výpisu" je patrný ze strace, což může vyvolávat dojem (můj dojem, neříkám, že to někdo tvrdí), jako by bylo vhodné nebo nutné to tímto způsobem zkoumat a dělat na základě toho nějaké závěry. Co tvrdím já je, že jde o chování zcela odpovídající standardu (POSIX), které je na většině systémů předvídatelné, byť se na něj nedá spoléhat (např. protože standard použití vyrovnávací paměti nevynucuje). V tomto kontextu je uváděné tvrzení, že pomůže fflush nebo vypsání nového řádku před forkem, nesprávné, neboť odpovídá pouze pozorování na konkrétním systému. Může existovat jiný systém, kde vypsání nového řádku zmíněný efekt nemá (pro fflush to je normou vyžadováno).
    27.2.2008 11:17 petris
    Rozbalit Rozbalit vše Re: fork()
    Mel by to spis vedet z hlavy protoze printf je standardni funkce C a chovani streamu se popisuje snad v kazde ucebnici C.
    27.2.2008 09:14 Tom.š Ze.le.in | skóre: 21 | blog: tz
    Rozbalit Rozbalit vše Re: fork()
    Teď nemám kde to zkusit, ale může se něco podobného stát na úrovni cache "uvnitř jádra" (např. při použití TCP_CORK)?
    27.2.2008 09:32 kvido
    Rozbalit Rozbalit vše Re: fork()
    Netuším co je TCP_CORK "uvnitř jádra", nicméně si troufnu odpovědět. Nejde o žádnou magii, ale chování vyplývající z toho, že fork kopíruje (mimo jiné) file deskriptory rodiče do potomka. Toto je popsáno a je třeba to vědět a ošetřit podle toho, co přesně je požadováno. Časté je, že před voláním fork se volá flush (aby později nedošlo ke zde zmíněnému dvojitému vypsání obsahu vrovnávací paměti) a první akce, kterou potomek provede, je zavření zděděných deskriptorů. Zpět k dotazu - pokud je to správně naprogramované, žádný dvojitý výpis apod. nehrozí. Předpokládejme, že v jádře je to správně naprogramované.
    27.2.2008 12:23 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: fork()
    Mám dojem, že si pletete FILE z libc a file descriptor procesu z jadra.

    Situace před forkem:
    PID User space              | Kernel space
    1   FILE *stream1 → int fd1 --→ int kfd1
    
    Situace po forku:
    PID User space              | Kernel space
    1   FILE *stream1 → int fd1 -+→ int kfd1
    2   FILE *stream1 → int fd1 -+ 
    
    Je třeba brát na zřetel, že struct FILE obsahuje vlastní buffer a ukazatel v uživatelském prostoru, tudíž po forku dojde k jeho duplikaci a vzájemné nezávislosti.

    Naopak int fd v uživ. prostoru je jen číslo, které si jádro spolu s PID přemapuje na interní deskriptor. Buffer file/socket descriptoru je v prostoru jádra a je jenom jeden.

    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.