Waydroid (Wikipedie, GitHub) byl vydán v nové verzi 1.6.0. Waydroid umožňuje spouštět aplikace pro Android na běžných linuxových distribucích. Běhové prostředí vychází z LineageOS.
Příspěvek na blogu Raspberry Pi představuje novou kompletně přepracovanou verzi 2.0 aplikace Raspberry Pi Imager (YouTube) pro stažení, nakonfigurování a zapsání obrazu operačního systému pro Raspberry Pi na SD kartu. Z novinek lze vypíchnout volitelnou konfiguraci Raspberry Pi Connect.
Memtest86+ (Wikipedie), svobodný nástroj pro kontrolu operační paměti, byl vydán ve verzi 8.00. Přináší podporu nejnovějších procesorů Intel a AMD nebo také tmavý režim.
Programovací jazyk Racket (Wikipedie), tj. jazyk z rodiny jazyků Lisp a potomek jazyka Scheme, byl vydán v nové major verzi 9.0. Hlavní novinku jsou paralelní vlákna (Parallel Threads).
Před šesti týdny bylo oznámeno, že Qualcomm kupuje Arduino. Minulý týden byly na stránkách Arduina aktualizovány podmínky používání a zásady ochrany osobních údajů. Objevily se obavy, že by otevřená povaha Arduina mohla být ohrožena. Arduino ubezpečuje, že se nic nemění a například omezení reverzního inženýrství v podmínkách používání se týká pouze SaaS cloudové aplikace.
Knihovna libpng, tj. oficiální referenční knihovna grafického formátu PNG (Portable Network Graphics), byla vydána ve verzi 1.6.51. Opraveny jsou 4 bezpečnostní chyby obsaženy ve verzích 1.6.0 (vydána 14. února 2013) až 1.6.50. Nejvážnější z chyb CVE-2025-65018 může vést ke spuštění libovolného kódu.
Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 159 (pdf).
Hru Warhammer: Vermintide 2 (ProtonDB) lze na Steamu získat zdarma napořád, když aktivaci provedete do pondělí 24. listopadu.
Virtualizační software Xen (Wikipedie) byl vydán v nové verzi 4.21. Podrobnosti v poznámkách k vydání a přehledu nových vlastností.
Evropská komise schválila český plán na poskytnutí státní pomoci v objemu 450 milionů eur (téměř 11 miliard Kč) na rozšíření výroby amerického producenta polovodičů onsemi v Rožnově pod Radhoštěm. Komise o tom informovala v dnešní tiskové zprávě. Společnost onsemi by podle ní do nového závodu v Rožnově pod Radhoštěm měla investovat 1,64 miliardy eur (téměř 40 miliard Kč).
#define EVENT_SIZE ( sizeof (struct inotify_event) )
#define BUF_LEN ( 1024 * ( EVENT_SIZE + 16 ) )
int main(int argc, char **argv)
{
int length, i = 0;
int fd;
int wd;
char buffer[BUF_LEN];
fd = inotify_init();
if (fd < 0) {
perror("inotify_init");
}
wd = inotify_add_watch(fd, "/home/tomesh/Dropbox/C/sync", IN_ALL_EVENTS);
if (length < 0) {
perror("read");
}
while (1) {
length = read(fd, buffer, BUF_LEN);
struct inotify_event *event = (struct inotify_event *) &buffer[ i ];
if (event->len) {
if (event->mask & IN_CREATE) {
if (event->mask & IN_ISDIR) {
printf("The directory %s was created.\n", event->name);
} else {
printf("The file %s was created.\n", event->name);
}
}
if (event->mask & IN_DELETE) {
if (event->mask & IN_ISDIR) {
printf("The directory %s was deleted.\n", event->name);
} else {
printf("The file %s was deleted.\n", event->name);
}
}
if (event->mask & IN_MODIFY) {
if (event->mask & IN_ISDIR) {
printf("The directory %s was modified.\n", event->name);
} else {
printf("The file %s was modified.\n", event->name);
}
}
if (event->mask & IN_MOVED_FROM) {
if (event->mask & IN_ISDIR) {
printf("The directory %s with cookie %d was moved from.\n", event->name, event->cookie);
} else {
printf("The file %s with cookie %d was moved from.\n", event->name, event->cookie);
}
}
if (event->mask & IN_MOVED_TO) {
if (event->mask & IN_ISDIR) {
printf("The directory %s with cookie %d was moved to.\n", event->name, event->cookie);
} else {
printf("The file %s with cookie %d was moved to.\n", event->name, event->cookie);
}
}
if (event->mask & IN_MOVE_SELF) {
if (event->mask & IN_ISDIR) {
printf("The directory %s with cookie %ds was itself moved.\n", event->name, event->cookie);
} else {
printf("The file %s with cookie %d was itself moved.\n", event->name, event->cookie);
}
}
if (event->mask & IN_DELETE_SELF) {
if (event->mask & IN_ISDIR) {
printf("The directory %s with cookie %d was itself deleted.\n", event->name, event->cookie);
} else {
printf("The file %s with cookie %d was itself deleted.\n", event->name, event->cookie);
}
}
if (event->mask & IN_OPEN) {
if (event->mask & IN_ISDIR) {
printf("The directory %s with cookie %d was opened.\n", event->name, event->cookie);
} else {
printf("The file %s with cookie %d was opened.\n", event->name, event->cookie);
}
}
if (event->mask & IN_ATTRIB) {
if (event->mask & IN_ISDIR) {
printf("The directory %s with cookie %d attr was changed.\n", event->name, event->cookie);
} else {
printf("The file %s with cookie %d attr was changed.\n", event->name, event->cookie);
}
}
if (event->mask & IN_ACCESS) {
if (event->mask & IN_ISDIR) {
printf("The directory %s with cookie %d was accessed.\n", event->name, event->cookie);
} else {
printf("The file %s with cookie %d was accessed.\n", event->name, event->cookie);
}
}
}
}
(void) inotify_rm_watch(fd, wd[0]);
(void) close(fd);
exit(0);
}
Řešení dotazu:
i += EVENT_SIZE + event->len;
#define EVENT_SIZE ( sizeof (struct inotify_event) )
#define BUF_LEN ( 1024 * ( EVENT_SIZE + 16 ) )
int main(int argc, char **argv)
{
int length, i;
int fd;
int wd;
char buffer[BUF_LEN];
struct inotify_event *event;
fd = inotify_init();
if (fd < 0)
perror("inotify_init");
wd = inotify_add_watch(fd, "/home/tomesh/Dropbox/C/sync", IN_ALL_EVENTS);
while (1) {
i = 0;
length = read(fd, buffer, BUF_LEN);
if (length < 0)
perror("read");
if (length == 0)
sleep(1);
while (i < length) {
event = (struct inotify_event *) &buffer[i];
if (event->mask & IN_CREATE) {
if (event->mask & IN_ISDIR) {
printf("The directory %s was created.\n", event->name);
} else {
printf("The file %s was created.\n", event->name);
}
}
if (event->mask & IN_DELETE) {
if (event->mask & IN_ISDIR) {
printf("The directory %s was deleted.\n", event->name);
} else {
printf("The file %s was deleted.\n", event->name);
}
}
if (event->mask & IN_MODIFY) {
if (event->mask & IN_ISDIR) {
printf("The directory %s was modified.\n", event->name);
} else {
printf("The file %s was modified.\n", event->name);
}
}
if (event->mask & IN_MOVED_FROM) {
if (event->mask & IN_ISDIR) {
printf("The directory %s with cookie %d was moved from.\n", event->name, event->cookie);
} else {
printf("The file %s with cookie %d was moved from.\n", event->name, event->cookie);
}
}
if (event->mask & IN_MOVED_TO) {
if (event->mask & IN_ISDIR) {
printf("The directory %s with cookie %d was moved to.\n", event->name, event->cookie);
} else {
printf("The file %s with cookie %d was moved to.\n", event->name, event->cookie);
}
}
if (event->mask & IN_MOVE_SELF) {
if (event->mask & IN_ISDIR) {
printf("The directory %s with cookie %ds was itself moved.\n", event->name, event->cookie);
} else {
printf("The file %s with cookie %d was itself moved.\n", event->name, event->cookie);
}
}
if (event->mask & IN_DELETE_SELF) {
if (event->mask & IN_ISDIR) {
printf("The directory %s with cookie %d was itself deleted.\n", event->name, event->cookie);
} else {
printf("The file %s with cookie %d was itself deleted.\n", event->name, event->cookie);
}
}
if (event->mask & IN_ATTRIB) {
if (event->mask & IN_ISDIR) {
printf("The directory %s with cookie %d attr was changed.\n", event->name, event->cookie);
} else {
printf("The file %s with cookie %d attr was changed.\n", event->name, event->cookie);
}
}
if (event->mask & IN_ACCESS) {
if (event->mask & IN_ISDIR) {
printf("The directory %s with cookie %d was accessed.\n", event->name, event->cookie);
} else {
printf("The file %s with cookie %d was accessed.\n", event->name, event->cookie);
}
}
i += sizeof(struct inotify_event) +event->len;
}
}
(void) inotify_rm_watch(fd, wd);
(void) close(fd);
exit(0);
}
Tiskni
Sdílej: