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ářů: 10
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 362 hlasů
 Komentářů: 25, poslední včera 13:34
Rozcestník
Reklama

Dotaz: čtení /proc/sys/dev/cdrom/info

Jardík avatar 12.11.2006 00:02 Jardík | skóre: 40 | blog: jarda_bloguje
čtení /proc/sys/dev/cdrom/info
Přečteno: 210×
Mám takový problém. Snažím se přečíst soubor /proc/sys/dev/cdrom/info, bohužel se mi nedaří. Soubor je otevřen POSIX funkcí open() s přístupem O_RDONLY. Soubor se otevře (tj. funkce nevrátí -1). Poté v cyklu načítám bajt po bajtu (v souboru nelze seekovat a zjistit tak jeho velikost):
while( read( fd, (void*)&bajt, 1 ) == 1 )
{
  ....
}
Problém je v tom, že se načte pouze první znak. Pro další pak funkce vrátí 0 (ne -1, což by znamenalo chybu). Zajímalo by mě, jak takový soubor načíst.
Věřím v jednoho Boha.

Odpovědi

Jardík avatar 13.11.2006 21:04 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: čtení /proc/sys/dev/cdrom/info
Tak jsem se porozhlídnul všude možně po internetu a našel jsem jeden útržek kódu, kde na soubor v proc byly také použity fce open a read s tím rozdílem, že tam byl buffer něco přes 8000. Poprvé bylo vrácen počet přečtených bajtů a v druhé 0 (tj. EOF). Tak mě napadá, jestli se celý soubor nemusí přečíst najednou????? Nějak se mi kvůli tomu nechce prasit můj kód, takže se radši ptám. Pokud nikdo vědět nebude, tak to asi vyzkouším. Následuje výstup strace -r, kde se načte jen první znak C ze souboru. Zajímavé je, cat vypíše soubor celý (že by dostatečný buffer?). Další zarážející věcí je, že funkce getline() si klidně čte po řádcích. Jak jsem ale řekl, chtěl bych použít funkci open() a read() - kvůli jiným možnostem otevírání, než mi nabízí funkce fopen().
0.000040 write(1, "Debug: Application constructor -"..., 40) = 40
0.000491 write(1, "Debug: Application contructor - "..., 37) = 37
0.000170 brk(0)                    = 0x804a000
0.000027 brk(0x806b000)            = 0x806b000
0.000043 open("/proc/sys/dev/cdrom/info", O_RDONLY|O_LARGEFILE) = 3
0.000073 write(1, "File opened", 11) = 11
0.000069 write(1, "\n", 1)         = 1
0.000081 read(3, "C", 1)           = 1
0.000041 write(1, "Debug: something readed\n", 24) = 24
0.000088 read(3, "", 1)            = 0
0.000028 write(1, "C", 1)          = 1
0.000059 write(1, "\n", 1)         = 1
0.000073 read(3, "", 1)            = 0
0.000031 write(1, "Debug: Application::run() - begi"..., 35) = 35
0.000088 close(3)                  = 0
Zde je část kódu programu:
int main( ... )
{
	...
	File cdroms;
	File stdOut;
	stdOut.openStdOut();
	if( cdroms.open("/proc/sys/dev/cdrom/info", fmReadOnly ) )
	{
		stdOut.writeLine("File opened");
		String line;
		while( cdroms.readLine(line) )
		{
			stdOut.writeLine(line);
		}
		cdroms.close();
	}
	...
}

bool File::open( const String& fileName, FileMode mode, Permission perms )
{
	close();
	m_pHandle = ::open( fileName.cStr(), mode | O_LARGEFILE, (mode_t)perms );
	return opened();
}

Int64 File::read( Byte *data, Int64 size ) const
{
	if( size <= 0 ) return 0;
	if(!opened()) return -1;
	Int64 totalReaded = 0;
	Int64 readed = 0, toRead = 0;
	do{
		toRead = MIN(size-totalReaded,SSIZE_MAX);
		readed = (Int64)::read( m_pHandle, (void*)data, (size_t)toRead );
		if( readed == 0 ) break; //EOF
		if( readed < 0 ) return readed; //error
		totalReaded += readed;
		data += readed;
	} while(totalReaded < size);	
	return totalReaded;
}

bool File::readLine( String& str ) const
{
	bool somethingReaded = false;
	str.clear();
	Char chr;
	
	if( read( (Byte*)&chr, 1 ) == 1 )
	{
		somethingReaded = true;
		do{
			if( chr == 0 ) break;
			else if( chr == '\r' ) {
				prevR = true;
				break;
			} else if( chr == '\n' ) {
				if(prevR) {
					prevR = false;
					continue;
				} else break;
			} else {
				prevR = false;
				str.append(chr);
			}
		} while( read( (Byte*)&chr, 1 ) == 1 );
	}
	
	return somethingReaded;
}
Věřím v jednoho Boha.
Jardík avatar 13.11.2006 21:33 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: čtení /proc/sys/dev/cdrom/info
Hmm, takže jsem se dočetl, že je to bug v kernelu: http://lkml.org/lkml/2006/10/20/121.
Věřím v jednoho Boha.

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.