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 03:00 | Nová verze

    Byla vydána nová verze 25.12.30 svobodného multiplatformního video editoru Shotcut (Wikipedie) postaveného nad multimediálním frameworkem MLT. Shotcut je vedle zdrojových kódů k dispozici také ve formátech AppImage, Flatpak a Snap.

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

    Společnost Valve publikovala přehled To nej roku 2025 ve službě Steam aneb ohlédnutí za nejprodávanějšími, nejhranějšími a dalšími nej hrami roku 2025.

    Ladislav Hagara | Komentářů: 0
    včera 16:11 | Komunita

    Byly publikovány výsledky průzkumu mezi uživateli Blenderu uskutečněného v říjnu a listopadu 2025. Zúčastnilo se více než 5000 uživatelů.

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

    V dokumentově orientované databázi MongoDB byla nalezena a v upstreamu již opravena kritická bezpečností chyba CVE-2025-14847 aneb MongoBleed.

    Ladislav Hagara | Komentářů: 0
    29.12. 23:11 | IT novinky

    Při úklidu na Utažské univerzitě se ve skladovacích prostorách náhodou podařilo nalézt magnetickou pásku s kopií Unixu V4. Páska byla zaslána do počítačového muzea, kde se z pásky úspěšně podařilo extrahovat data a Unix spustit. Je to patrně jediný známý dochovaný exemplář tohoto 52 let starého Unixu, prvního vůbec programovaného v jazyce C.

    🇨🇽 | Komentářů: 1
    29.12. 15:55 | Komunita

    FFmpeg nechal kvůli porušení autorských práv odstranit z GitHubu jeden z repozitářů patřících čínské technologické firmě Rockchip. Důvodem bylo porušení LGPL ze strany Rockchipu. Rockchip byl FFmpegem na porušování LGPL upozorněn již téměř před dvěma roky.

    🇨🇽 | Komentářů: 7
    29.12. 15:44 | Zajímavý software

    K dispozici je nový CLI nástroj witr sloužící k analýze běžících procesů. Název je zkratkou slov why-is-this-running, 'proč tohle běží'. Klade si za cíl v 'jediném, lidsky čitelném, výstupu vysvětlit odkud daný spuštěný proces pochází, jak byl spuštěn a jaký řetězec systémů je zodpovědný za to, že tento proces právě teď běží'. Witr je napsán v jazyce Go.

    🇨🇽 | Komentářů: 1
    29.12. 15:33 | Zajímavý software

    Yazi je správce souborů běžící v terminálu. Napsán je v programovacím jazyce Rust. Podporuje asynchronní I/O operace. Vydán byl v nové verzi 25.12.29. Instalovat jej lze také ze Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    26.12. 18:44 | Komunita

    Od soboty do úterý probíhá v Hamburku konference 39C3 (Chaos Communication Congress) věnovaná také počítačové bezpečnosti nebo hardwaru. Program (jiná verze) slibuje řadu zajímavých přednášek. Streamy a záznamy budou k dispozici na media.ccc.de.

    Ladislav Hagara | Komentářů: 0
    26.12. 13:22 | Zajímavý software

    Byl představen nový Xserver Phoenix, kompletně od nuly vyvíjený v programovacím jazyce Zig. Projekt Phoenix si klade za cíl být moderní alternativou k X.Org serveru.

    🇨🇽 | Komentářů: 7
    Kdo vám letos nadělí dárek?
     (33%)
     (1%)
     (23%)
     (1%)
     (2%)
     (1%)
     (11%)
     (11%)
     (17%)
    Celkem 195 hlasů
     Komentářů: 21, poslední včera 18:58
    Rozcestník
    Štítky: není přiřazen žádný štítek

    Dotaz: Neúplný výstup na stdout při O_NONBLOCK stdin

    24.3.2008 01:04 martyone | skóre: 18
    Neúplný výstup na stdout při O_NONBLOCK stdin
    Přečteno: 535×
    Veselé velikonoce všem! :-)

    Můj problém je v ukázce kódu níže – jakmile nastavím stdin flag O_NONBLOCK, následující výstup na stdout se po chvíli zastaví a nehodlá pokračovat. Jakmile flag na stdin zruším, vše opět funguje jak má. Je to standardní chování? Dá se ovlivnit?

    Díky za každou reakci

    
    #include <unistd.h>
    #include <fcntl.h>
    #include <stdio.h>
    
    
    int main(int argc, char** argv)
    {
    	int flags, i;
    	char foo[]=
    		"% 6d 012345678901234567890123456789012345678901234567890123456789\n";
    
    	// vypise se vse
    	for (i= 0; i < 10000; i++) printf(foo, i);
    
    	// vypise se
    	puts("\nklavesu...");
    	fgetc(stdin);
    
    	flags= fcntl(fileno(stdin), F_GETFL, 0);
    	fcntl(fileno(stdin), F_SETFL, flags | O_NONBLOCK);
    
    	// NEvypise se vse
    	for (i= 0; i < 10000; i++) printf(foo, i);
    
    	// NEvypise se ani tohle
    	puts("\n*** KONEC ***");
    
    	fcntl(fileno(stdin), F_SETFL, flags);
    
    	// tohle se uz vypise
    	puts("\nklavesu...");
    	fgetc(stdin);
    
    	// vypise se vse
    	for (i= 0; i < 10000; i++) printf(foo, i);
    
    	// vypise se
    	puts("\n*** KONEC ***");
    
    	return (0);
    }
    

    Odpovědi

    Luboš Doležel (Doli) avatar 24.3.2008 01:05 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Neúplný výstup na stdout při O_NONBLOCK stdin
    Střílím: nepomohlo by udělat flush na ten stdout?
    24.3.2008 19:34 martyone | skóre: 18
    Rozbalit Rozbalit vše Re: Neúplný výstup na stdout při O_NONBLOCK stdin
    Bohužel ne – to dělám v původním (C++) kódu, kde jsem se s tímto chováním setkal.
    24.3.2008 01:37 Andrej Herceg | skóre: 43
    Rozbalit Rozbalit vše Re: Neúplný výstup na stdout při O_NONBLOCK stdin
    24.3.2008 19:43 martyone | skóre: 18
    Rozbalit Rozbalit vše Re: Neúplný výstup na stdout při O_NONBLOCK stdin
    Musím se přiznat, že jsem nějak nenašel souvislost(?) …
    24.3.2008 20:48 Andrej Herceg | skóre: 43
    Rozbalit Rozbalit vše Re: Neúplný výstup na stdout při O_NONBLOCK stdin
    Pôvodne som si myslel, že je problém v tom, že aj rodičovskému procesu sa nastaví stdin na neblokujúci.

    Problém je pravdepodobne inde, ale vyzerá to tak, že je to s tým odkazom súvisí. Keď je zariadenie terminál, tak stdin, stdout a stderr je v podstate rovnaký súbor (pravdepodobne je file descriptor iba zduplikovaný) a zmena jedného na NONBLOCK zmení aj ostatné (aspoň ja som to tak pochopil).

    Na jednej stránke som našiel citát R. Stevensa z UNIX Network Programming Vol1, p.399
    using standard I/O with nonblocking descriptors, a recipe for disaster
    (ale celé som to nečítal, takže neviem, v čom je ten problém)

    Tento program dokazuje, že zmena stdin na neblokujúci, zmení aj stdout a stderr (aspoň u mňa).
    #include <unistd.h>
    #include <fcntl.h>
    #include <stdio.h>
    
    
    int main(int argc, char** argv)
    {
    	int flags;
    
    	fprintf(stdout, "stdin: %s\n", (fcntl(fileno(stdin), F_GETFL, 0) & O_NONBLOCK) ? "NONBLOCK" : "BLOCK");
    	fprintf(stdout, "stdout: %s\n", (fcntl(fileno(stdout), F_GETFL, 0) & O_NONBLOCK) ? "NONBLOCK" : "BLOCK");
    	fprintf(stdout, "stderr: %s\n", (fcntl(fileno(stderr), F_GETFL, 0) & O_NONBLOCK) ? "NONBLOCK" : "BLOCK");
    
    	flags= fcntl(fileno(stdin), F_GETFL, 0);
    	fcntl(fileno(stdin), F_SETFL, flags | O_NONBLOCK);
    
    	fprintf(stdout, "stdin: %s\n", (fcntl(fileno(stdin), F_GETFL, 0) & O_NONBLOCK) ? "NONBLOCK" : "BLOCK");
    	fprintf(stdout, "stdout: %s\n", (fcntl(fileno(stdout), F_GETFL, 0) & O_NONBLOCK) ? "NONBLOCK" : "BLOCK");
    	fprintf(stdout, "stderr: %s\n", (fcntl(fileno(stderr), F_GETFL, 0) & O_NONBLOCK) ? "NONBLOCK" : "BLOCK");
    
    	fcntl(fileno(stdin), F_SETFL, flags);
    
    	return (0);
    }
    
    24.3.2008 21:37 martyone | skóre: 18
    Rozbalit Rozbalit vše Re: Neúplný výstup na stdout při O_NONBLOCK stdin
    Aha, děkuju :-)

    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.