Mercurial (Wikipedie), software pro SCM (Source Code Management), byl vydán ve verzi 6.4. Přehled novinek v poznámkách k vydání. Ve dnech 5. až 7. dubna proběhne konference Mercurial Paris.
Byly rozdány Ceny Velkého bratra (Big Brother Awards) za rok 2022 pro největší slídily pořádané nevládní organizací Iuridicum Remedium. Dlouhodobý slídil: Microsoft. Firemní slídil: Seznam. Úřední slídil: Nejvyšší správní soud. Výrok Velkého bratra: Marian Jurečka. Pozitivní cena: NoLog.
Byla představena online vzdělávací platforma Ada Computer Science pro učitele, studenty a kohokoli, kdo se zajímá o informatiku. Stojí za ní Raspberry Pi Foundation a Univerzita v Cambridgi.
GitHub má nový RSA SSH klíč. Předchozí soukromý klíč byl krátce vystaven na GitHubu.
Společnost Framework Computer představila (YouTube) nové modulární notebooky: Laptop 13 s Intel Core nebo AMD Ryzen a Laptop 16 (YouTube).
Bylo vydáno Ubuntu 20.04.6 LTS, tj. šesté opravné vydání Ubuntu 20.04 LTS s kódovým názvem Focal Fossa. Přehled novinek v poznámkách k vydání a v přehledu změn.
Připojit neznámý USB flash disk do počítače může být nebezpečné. Dokonce může jít i o život. Někdo rozeslal ekvádorským novinářům USB flash disky, které po připojení do počítače explodují [BBC, Twitter].
Byla vydána nová verze 7.4 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu.
Byla vydána verze 11.0 s kódovým jménem Aramo linuxové distribuce Trisquel GNU/Linux. Založena je na Ubuntu 22.04 LTS a podporována bude do roku 2027. Trisquel patří mezi svobodné distribuce doporučované Nadací pro svobodný software (FSF).
Mozilla založila startup Mozilla.ai a vložila do něj 30 milionů dolarů. Cílem je vývoj důvěryhodné, nezávislé a open source AI.
Řešení dotazu:
#define NAZEV "out.txt"
int main()
{
FILE *soubor;
soubor = fopen(NAZEV, "a+");
int roura[2];
pipe(roura);
pid_t pid1;
int retcode;
pid1=fork();
if(pid1 == 0) // potomek1
{
close(roura[0]);
printf("Potomek1...\n");
dup2(roura[1], STDOUT_FILENO); // presmerovani výstupu do roury
int i = 0;
while(i < 6)
{
i++;
int a = 2 + i;
int b = 4 + i;
sleep(1);
printf("%d %d\n", a, b);
}
close(roura[1]);
exit(45);
} else if (pid1 < 0)
{
printf("Fork selhal\n");
exit(2);
} else
{
pid_t pid2;
pid2 = fork();
if (pid2 == 0) //potomek 2
{
close(roura[1]);
dup2(roura[0], STDIN_FILENO); //presmerovani výstup roury na svůj standardní vstup
printf("Potomek2...\n");
int i = 0;
while(i < 5)
{
i++;
int c;
int d;
scanf("%d %d", &c, &d);
printf("%d %d\n", c, d);
fprintf(soubor,"%d %d\n", c, d);
}
printf("Potomek2 skoncil\n");
exit(0);
} else if (pid2 < 0)
{
printf("Fork selhal\n");
exit(2);
}else
{ wait(&pid1); //ceka na potomka1
wait(&pid2); //ceka na potomka2
printf("Rodic konci\n");
exit(0);
}
}
exit(0);
}
sigaction
někam poznamená, že přišel signál. Ten proces bude v tu dobu nejspíš viset na sleep
, který příchozí signál přeruší s EINTR
, ale nemusí, takže je vhodné to otestovat i před tím sleep
em. Stačí se pak podívat, jestli byl poznamenán příchod signálu, a pokud ano, tak proces ukončit. Pokud nepotřebujete po přerušení uklidit, tak ukončit proces jde i ze sigaction
pomocí _exit()
.
Mimochodem pokud potřebujete zastavit zapisující proces ze čtecího, stačí ve čtecím procesu tu rouru zavřít. Zapisovací proces pak při pokusu o zápis dostane SIGPIPE
.
Tiskni
Sdílej: