Byl vydán Mozilla Firefox 154.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 154 bude brzy k dispozici také na Flathubu a Snapcraftu.
Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 168 (pdf).
Open-source citační manažer Zotero (Wikipedie, GitHub) byl vydán v nové major verzi 10. Přehled novinek v příspěvku na blogu.
Interaktivní editor binárních dat GNU poke byl vydán ve verzi 5.0 (seznam změn).
Byla vydána verze 0.85 telnet a ssh klienta PuTTY (Wikipedie). Řešeno je 5 zranitelností.
Byly publikovány novinky z vývoje GIMPu. Pracuje se na novém formátu souborů. Stávající binární XCF bude nahrazen "zazipovaným XML". XCF zůstane plně podporován pouze pro načítání starých souborů.
Workshop o umělé inteligenci v Dartmouthu proběhl před 70 lety, od 18. června do 17. srpna 1956. Dvouměsíční soustředění 6–11 informatiků, iniciované Johnem McCarthym, položilo základy oboru umělé inteligence.
Po 9 týdnech vývoje od vydání Linuxu 7.1 oznámil Linus Torvalds vydání Linuxu 7.2. Podrobný přehled novinek a vylepšení na Linux Kernel Newbies nebo LWN.net: první a druhá polovina začleňovacího okna.
Debian dnes slaví 33 let. Ian Murdock oznámil vydání "Debian Linux Release" 16. srpna 1993.
Probíhá hlasování o používání LLM při vývoji Debianu. Vývojáři Debianu mají na výběr 9 možností (návrhy A až H a žádný z nich).
/dev/sda1 atd./dev?/dev/block/ jsou odpovídají symlinky, ale dá se na tohle spolehnout, že to tak bude i na jiných linuxových strojích? Odpovídá to POSIXu?statem zjišťovat, který device odpovídá?
Řešení dotazu:
major/minor number to device path translate
O /dev/block/ se stará udev, tak by to snad na Linuxových strojích s jádrem 2.6 neměl být problém.
$ vim /etc/udev/rules.d/50-udev.rules SUBSYSTEM=="block", SYMLINK+="block/%M:%m"
Jestli se nepletu, tak v POSIX žádná zmíňka o /dev/block není IEEE Std 1003.1, 2004 Edition, ISO/IEC 9945.
/devu statem.
string device_from_number(unsigned int major, unsigned int minor)
{
const string devdir = "/dev/";
const string devblockdir = "/dev/block/";
stringstream ss;
string result = "";
ss << major << ':' << minor << flush;
if (file_exists(devblockdir))
{
if (!dir_empty(devblockdir))
{
if (file_exists(devblockdir+ss.str())) result = devblockdir+ss.str();
} else goto fallback;
} else
{
fallback:
DIR* dir;
dirent* ent;
dir = opendir(devdir.c_str());
if (dir)
{
while (ent = readdir(dir))
{
struct stat finfo;
string fn = devdir + ent->d_name;
if (!stat(fn.c_str(), &finfo))
{
if (S_ISBLK(finfo.st_mode) && (makedev(major, minor) == finfo.st_rdev))
{
result = fn;
break;
}
}
}
} else
{
ohshiT(errno, ERR_OPENING_DIR, "Could not open directory: '"+devdir+"'");
}
closedir(dir);
}
return result;
}
(Toho makra dole si nevšímejte, tím vyhazuju exceptions)
Tiskni
Sdílej: