Open-source trackball Ploopy Adept má novou verzi nazvanou A+. Stále jde o symetrický desktopový trackball s šasi z 3D tiskárny a firmwarem QMK. Novinkami jsou dvojice tlačítek, jimiž půjde také otáčet, a volitelná opěrka ruky. Funkcionalita firmwaru je rozšířena o gesta, vrstvy a možnost konfigurace za běhu. Schémata a kód jsou jako obvykle na GitHubu. A+ půjde předobjednat za 99 CAD (bez dopravy a cla/DPH).
Prusa Research představil nové modely svých 3D tiskáren: Prusa XL+, CORE One+ (Gen 2) a CORE One L+.
Crown je multiplatformní open source herní engine. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT a GPLv3+. Byla vydána nová verze 0.64. Vyzkoušet lze online demo.
NVIDIA na konci ledna vydala v beta verzi nativního linuxového klienta své cloudové herní služby GeForce NOW. Včera oznámila ukončení beta verze a oficiální podporu Linuxu.
Byla vydána nová verze 3.5.0 nástroje pro inkrementální kopírování souborů rsync (Wikipedie). Přehled oprav a vylepšení v souboru NEWS. Řešeno je 33 zranitelností.
Organizace Apache Software Foundation (ASF) vydala verzi 31 integrovaného vývojového prostředí a vývojové platformy napsané v Javě NetBeans (Wikipedie). Přehled novinek na GitHubu. Instalovat lze také ze Snapcraftu a Flathubu.
Firma IBM uvedla svůj první mikropočítač Personal Computer před 45 lety, v srpnu 1981. Základní konfigurace modelu 5150 za 1 565 tehdejších dolarů obsahovala desktop s Intel 8088 a 16KB RAM, Color Graphics Adapter a klávesnici. Právě klávesnice Model F/XT vybavené kapacitními spínači, vlivné a s převodníkem dodnes použitelné, připomíná sběratelský web Admiral Shark's Keyboards.
Slovensko odhalilo ruské součástky ve dvou testovaných zařízeních na zjišťování přestupků v silničním provozu a označilo je za bezpečnostní riziko. S odvoláním na vyjádření slovenského Národního bezpečnostního úřadu (NBÚ) to včera oznámil ministr vnitra Matúš Šutaj Eštok. Zároveň ohlásil ukončení spolupráce svého úřadu s dodavatelem části uvedeného systému, slovenskou společností Soitron. Opozice, která na problematické kamery upozornila už dříve, vyzvala k odvolání ministra vnitra.
Dle plánu dnes ve 13:00 proběhne veřejný test eDokladů. Jeho cílem je ověřit připravenost aplikace a související infrastruktury na vysokou souběžnou zátěž před podzimními komunálními volbami.
Byla vydána nová verze 3.47 frameworku Flutter (Wikipedie) pro vývoj mobilních, webových i desktopových aplikací a nová verze 3.13 souvisejícího programovacího jazyka Dart (Wikipedie).
Poslal jsem také kus zdrojového kódu, obsahující jen to nezbytné.
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <string.h>
// odstraneni procesu drive, nez se z nej stane zombie
void clean_up_child(int sig_num) {
wait(NULL);
printf("Odstraneni procesu.\n"); fflush(stdout);
}
// vytvori proces, presmeruje in na stdin a spusti prikaz
// vraci cislo procesu potomka a do out ulozi vstupni FD jako vystup dat potomka
int make_child(char **cmd_params, int in, int &out) {
int fds[2];
pid_t pid;
pipe(fds); // vytvoreni pipy
pid = fork(); // vytvoreni potomka
if (pid > 0) { // rodic
close(fds[1]); // uzavreni vystupniho FD
out = fds[0]; // vraceni vstupniho FD
printf("Prikaz '%s', pid=%d, fds[0]=%d, fds[1]=%d, in=%d\n", cmd_params[0], pid, fds[0], fds[1], in); fflush(stdout);
return pid;
}
else if (pid == 0) { // potomek
close(fds[0]); // uzavreni vstupniho FD
// presmerovani stdin na in
close(STDIN_FILENO);
dup2(in, STDIN_FILENO);
close(in);
// presmerovani stdout na FD
close(STDOUT_FILENO);
dup2(fds[1], STDOUT_FILENO);
close(fds[1]);
printf("Before Exec '%s'\n", cmd_params[0]); fflush(stdout);
// spusteni prikazu
execvp(cmd_params[0], cmd_params);
return -1; // exec se vratil - vznikla chyba
}
else { // chyba forku
return -1;
}
return 0;
}
int main(void) {
// zabraneni vzniku zombie procesu
/* struct sigaction sigact;
memset(&sigact, 0, sizeof(sigact));
sigact.sa_handler = &clean_up_child;
sigaction(SIGCHLD, &sigact, NULL);
*/
int out, out1, out_end, r;
int r1, r2, r3;
char *cmd1[] = {"ls", "-laR", "/etc", 0};
char *cmd2[] = {"sort", 0};
char *cmd3[] = {"grep", "bin", 0};
r1 = make_child(cmd1, STDIN_FILENO, out);
r2 = make_child(cmd2, out, out1);
r3 = make_child(cmd3, out1, out_end);
char str_out[256];
if (r1 == -1 || r2 == -1 || r3 == -1) {
printf("Error while making child!\n"); fflush(stdout);
}
// vypsani vystupu posledniho prikazu
while ((r = read(out_end, str_out, 255)) > 0)
write(STDOUT_FILENO, str_out, r);
printf("\n");
close(out_end);
return 0;
}
if (pid > 0) { // rodic. Obycejne se tam i hlidaji vracene return kody. Rekl bych, ze mas problem s casovanim, ze se ti ty prikazy vykonavaji tak rychle jak to jen jde a tedy skoro paralelene a tedy si prikazy navzajem nepredavaji potrebne vstupy a vystupy. Necekaji na sebe.
...
// vypsani vystupu posledniho prikazu
while ((r = read(out_end, str_out, 255)) > 0)
write(STDOUT_FILENO, str_out, r);
printf("\n");
wait(NULL);
close(out_end);
return 0;
}
#include <errno.h>
...
do {
r = read(out_end, str_out, 255);
if (r == -1) {
if (errno == EINTR) {
continue;
} else {
perror("chyba pri cteni");
exit(1);
}
}
write(STDOUT_FILENO, str_out, r);
} while (r != 0);
Ten wait tam přeci vůbec nemusí být, ne? Handler vypíše, že byl potomek ukončen a program skončí.Potomka - zombie odstraní pouze příkaz wait nebo jeho odvozenina. Handler bez funkčního volání příkazu wait si může vypisovat co chce, ale potomka - zombie určite neodstraní.
Teď jsem dal ten výpis před wait a vypsalo ho to jen jednou. Přitom by mělo 3x?
Tiskni
Sdílej: