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:20 | Zajímavý článek

David Revoy, autor open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu, upozorňuje na svém blogu, že nový Inkscape 0.92 rozbíjí dokumenty vytvořené v předchozích verzích Inkscape. Problém by měl být vyřešen v Inkscape 0.92.2 [reddit].

Ladislav Hagara | Komentářů: 0
dnes 02:02 | Komunita

Øyvind Kolås, hlavní vývojář grafických knihoven GEGL a babl, které využívá grafický program GIMP, žádá o podporu na Patreonu. Díky ní bude moci pracovat na vývoji na plný úvazek. Milník 1000 $, který by stačil na holé přežití, se již téměř podařilo vybrat, dalším cílem je dosažení 2500 $, které mu umožní běžně fungovat ve společnosti.

xkomczax | Komentářů: 12
včera 23:54 | Pozvánky

DevConf.cz 2017, již devátý ročník jedné z největších akcí zaměřených na Linux a open source ve střední Evropě, proběhne od pátku 27. ledna do neděle 29. ledna v prostorách Fakulty informačních technologií Vysokého učení technického v Brně. Na programu je celá řada zajímavých přednášek a workshopů. Letos je povinná registrace.

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

Byla vydána verze 1.0.0 emulátoru terminálu Terminology postaveného nad EFL (Enlightenment Foundation Libraries). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
20.1. 17:00 | Nová verze

Byl vydán Docker 1.13. Přehled novinek na YouTube a v poznámkách k vydání na GitHubu. Docker umožňuje běh aplikací v softwarových kontejnerech (Wikipedia).

Ladislav Hagara | Komentářů: 4
20.1. 15:51 | Komunita

Mozilla.cz informuje, že nástroje pro webové vývojáře se možná oddělí od Firefoxu a stanou doplňkem. Nástroje pro webové vývojáře prošly velkým přepisem a tým, který se stará o jejich vývoj, by uvítal možnost jejich častějších aktualizacích nezávisle na vydávání nových verzí Firefoxu.

Ladislav Hagara | Komentářů: 9
20.1. 07:00 | Humor

Čtenářům AbcLinuxu vše nejlepší k dnešnímu Dni zvýšení povědomí o tučňácích (Penguin Awareness Day).

Ladislav Hagara | Komentářů: 0
20.1. 06:00 | Komunita

Bylo spuštěno hlasování o přednáškách a workshopech pro letošní InstallFest, jenž proběhne o víkendu 4. a 5. března v Praze. Současně byla oznámena změna místa. InstallFest se letos vrací zpět na Karlovo náměstí do budovy E.

Ladislav Hagara | Komentářů: 0
20.1. 02:48 | Komunita

Greg Kroah-Hartman potvrdil, že Linux 4.9 je jádrem s prodlouženou upstream podporou (LTS, Long Term Support). Podpora je plánována do ledna 2019. Aktuální jádra s prodlouženou podporou jsou tedy 3.2, 3.4, 3.10, 3.12, 3.16, 3.18, 4.1, 4.4 a 4.9.

Ladislav Hagara | Komentářů: 0
20.1. 00:11 | Zajímavý článek

Výrobce síťových prvků, společnost Netgear, spustila nový program, který slibuje vývojářům, expertům, ale i běžným uživatelům vyplacení finanční odměny za nalezení bezpečnostních chyby v jejich produktech. Za nalezení zranitelnosti v hardware, API nebo mobilní aplikaci nabízí odměnu od 150 do 15 tisíc dolarů (dle závažnosti).

Michal Makovec | Komentářů: 0
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (10%)
 (2%)
 (74%)
 (3%)
 (10%)
Celkem 360 hlasů
 Komentářů: 25, poslední včera 13:34
Rozcestník
Reklama

Dotaz: rychlost write() a puts()

Martin Tůma avatar 3.6.2005 14:12 Martin Tůma | skóre: 38 | blog: RTFM | Praha
rychlost write() a puts()
Přečteno: 34×

Může mi někdo vysvětlit, proč jsou operace provedené na souborech otevřených pomocí open() mnohem pomalejší než operace prováděné se soubory otevřenými pomocí fopen()? (Oboje dvoje na obyčejných souborech)

Případně pokuď existuje, tak bych uvítal nějaký "trik" jak dosáhnout stejné rychlosti.

Každý má právo na můj názor!

Odpovědi

3.6.2005 14:28 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: rychlost write() a puts()
Pomalejší rozhodně nejsou, ale záleží na tom, co děláš. Nejspíš s těmi soubory zacházíš tak, že je pro tebe bufferování v stdio velmi výhodné.
Martin Tůma avatar 3.6.2005 15:15 Martin Tůma | skóre: 38 | blog: RTFM | Praha
Rozbalit Rozbalit vše Re: rychlost write() a puts()

Hmm, takže s tím očividně neumím zacházet... Proč může být druhý kód mnohonásobně pomalejší než první?

kód 1 - fopen

	/* Hlavicka */

	if(!fwrite(&header, sizeof(header), 1, fp))
		return 0;
	
	/* Data */
	
	if((fr = fopen(file_name, "r")) == NULL)
		return 0;

	while(c = getc(fr), !feof(fr))
		putc(c, fp);

	if(fclose(fr) == EOF)
		return 0;

kód 2 - open

	/* Hlavicka */

	if(write(fp, &header, sizeof(header)) != sizeof(header))	
		return 0;

	/* Data */
	
	if((fr = open(file_name, O_RDONLY)) == -1)
		return 0;

	while(read(fr, &c, 1) > 0)
		write(fp, &c, 1)
			
	if(close(fr) == -1)
		return 0;

fp je deskriptor normálního otevřeného souboru, v prvnim případě FILE *, ve druhém int.

Program ve kterém to potřebuju použít by měl bejt obdobou tar -cvvzf. Potřeboval bych proto vytvořený archiv po znaku rovnou posílat pomocí roury komprimátoru, ale pomocí write() a read() je to strašně pomalý - tak, že mnohem rychlejší je nejdříve vytvořit archiv a pak ho znova načítat a komprimovat...

Každý má právo na můj názor!
3.6.2005 15:22 0
Rozbalit Rozbalit vše Re: rychlost write() a puts()

Co zkusit ve druhem pripade misto jednoho znaku treba 1000?:

char pole[1000];
while(read(fr,pole,1000))
    write(fp,pole,1000);

Duvod je ten, ze kdyz jedes znak po znaku, tak pro kazdou operaci pouzijes jedno preruseni a to bez ohledu na to, kolik mas dat, takze procesor se musi porad starat o preruseni misto toho aby dal prikaz pameti/disku, ze ma neco udelat.

Martin Tůma avatar 3.6.2005 15:28 Martin Tůma | skóre: 38 | blog: RTFM | Praha
Rozbalit Rozbalit vše Re: rychlost write() a puts()

To mě taky napadlo, ale pro LZW kompresy potřebuju ty znaky pak dostávat stejně po znaku (šlo by si ale udělat nějakej buffer). Nicméně proč je to pomocí fputs() "normálně" rychlý a pomocí write() tak pomalý?

Každý má právo na můj názor!
3.6.2005 15:40 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: rychlost write() a puts()
Protože write() je sycall, kdežto fputc() je téměř vždy triviální operace přidání znaku do nějakého bufferu, jen jednou za čas se něco zapíše. Ostatně na fputc() nejvíc sežere zamykání, fputc_unlocked() už je úplně triviální.
3.6.2005 15:41 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: rychlost write() a puts()
Protože fputs bufferuje, takže buď používej stdio, nebo si napiš vlastní funkci, která bude dělat totéž.
3.6.2005 15:43 podlesh | skóre: 38 | Praha
Rozbalit Rozbalit vše Re: rychlost write() a puts()
Takže potřetí, trochu polopatičtěji: funkce pracující s descriptorem (open, read, write) jsou low=level, přímo provádějí operaci. Funkce ktere pracují s FILE strukturou provádějí buffering. Při čtení/zápisu po jednom byte má opravdu velký význam (a to je důvod proč tam je).
3.6.2005 15:56 martin
Rozbalit Rozbalit vše Re: rychlost write() a puts()
tak to už máme putc(), puts() a + ještě fputs(). m.

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.