Redox OS (Wikipedie), tj. mikrokernelový unixový operační systém naprogramovaný v programovacím jazyce Rust, nově podporuje X11 a GTK 3.
Dnes po celém světě startuje prodej herní konzole Nintendo Switch 2.
Stovky Indů předstíraly, že jsou neuronová síť. Vzestup a pád Builder.ai.
Při operaci Pavučina, tj. rozsáhlé diverzní akci ukrajinských bezpečnostních sil, provedené 1. června 2025, při které byly bezpilotními kvadrokoptérami napadeny ruské strategické letecké základny hluboko na území Ruské federace, byl použít [𝕏] svobodný software ArduPilot (Wikipedie). Zdrojové kódy jsou k dispozici na GitHubu pod licencí GNU GPLv3.
V polovině května uplynul jeden rok od spuštění aukcí CZ domén, které provozuje sdružení CZ.NIC. Hlavním cílem bylo zpřístupnit uvolňované domény z registru (po expiraci nebo smazání) většímu okruhu zájemců. Před spuštěním aukcí se totiž k takovým doménám dostávalo jen několik málo subjektů, které uvolňované domény „odchytávaly“ s velkou úspěšností díky automatizovaným systémům k tomu připraveným. Běžný zájemce neměl reálnou šanci
… více »UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch, vydala Ubuntu Touch OTA-9 Focal, tj. deváté stabilní vydání založené na Ubuntu 20.04 Focal Fossa.
Firma Murena představila (PeerTube, YouTube) novou verzi 3.0 mobilního operačního systému /e/OS (Wikipedie) založeného na Androidu a LineageOS bez aplikací a služeb od Googlu.
Byla vydána nová verze 5.12 svobodného multiplatformního softwaru pro konverzi a zpracování digitálních fotografií primárně ve formátů RAW RawTherapee (Wikipedie). Vedle zdrojových kódů je k dispozici také balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo ke spuštění a spustit.
Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za květen (YouTube).
Byly publikovány informace (txt) o zranitelnostech CVE-2025-5054 v Apport a CVE-2025-4598 v systemd-coredump. Lokální uživatel se může dostat k výpisu paměti programu (core dump) s SUID a přečíst si tak například /etc/shadow.
/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: