Vývojáři Kali Linuxu upozorňují na nový klíč pro podepisování balíčků. K původnímu klíči ztratili přístup.
V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.
Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).
Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.
Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.
Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.
Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.
Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
/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.
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) = 0Zde 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; }
Tiskni
Sdílej: