Upozornění pro uživatele Asahi Linuxu: Neaktualizujte macOS na verzi 27 Golden Gate! Apple změnil detekci spouštěcích oddílů. Po aktualizaci oddíl s Asahi Linuxem nevidí. Snad je to jenom chyba.
Na webu konference Den IPv6, která se konala 4. června v Národní technické knihovně v pražských Dejvicích, jsou nyní k dispozici všechny prezentace (v PDF) a jejich videozáznamy. Organizátory konference byly i letos sdružení CESNET, CZ.NIC a NIX.CZ.
Byla vydána nová verze 9.1.0 správce sbírky fotografií digiKam (Wikipedie). Přehled novinek i s náhledy v oficiálním oznámení (NEWS). Vypíchnout lze vylepšené vyhledávání nebo podporu Pixel Motion Photos. Nejnovější digiKam je ke stažení také jako balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo ke spuštění a spustit.
Přihlaste svou přednášku na další ročník konference LinuxDays, který proběhne 3. a 4. října na FIT ČVUT v pražských Dejvicích. Příjem témat poběží do konce prázdnin, pak proběhne veřejné hlasování a následně sestavení programu.
Byla vydána nová verze 2.4.68 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 13 zranitelností.
Apple na své vývojářské konferenci WWDC26 (Worldwide Developers Conference, keynote) představil řadu novinek. Vypíchnout lze novou generaci Apple Intelligence a zbrusu novou Siri, která dostala název Siri AI. Kvůli Aktu o digitálních trzích (DMA) však funkce Siri AI nebudou v systémech iOS 27 a iPadOS 27 k dispozici uživatelům v Evropské unii.
Byla vydána nová verze 1.18.0 distribučního frameworku Flatpak (Wikipedie), tj. technologie umožňující distribuovat aplikace v podobě jednoho instalačního souboru na různé linuxové distribuce a jejich různá vydání. Přehled novinek na GitHubu. Vypíchnout lze podporu rozhraní /dev/kfd pro výpočty na kartách AMD (AMDKFD).
aMule (Wikipedie), tj. multiplatformní klient pro peer-to-peer sdílení souborů pro sítě eD2k and Kademlia, byl po více než pěti letech od vydání poslední verze 2.3.3, vydán v nové major verzi 3.0.0 (GitHub). S novou webovou stránkou a dokumentací.
Byly vyhlášeni vítězové a zveřejněny vítězné zdrojové kódy (YouTube, GitHub) již 29. ročníku soutěže International Obfuscated C Code Contest (IOCCC), tj. soutěže o nejnepřehlednější (nejobfuskovanější) zdrojový kód v jazyce C.
Evropská komise předložila evropský balíček pro technologickou suverenitu, tedy soubor opatření, která mají posílit kapacity EU v oblasti polovodičů, umělé inteligence, cloudu a open source. To Evropě pomůže stát se lídrem v oblasti umělé inteligence, posílit její digitální autonomii a vytvářet podmínky pro udržitelnější digitální budoucnost.
|v C. Kod nize funguje jako rourapro prikazy bez parametru, ale premyslim, jak to udelat, aby roura fungovala obecne, tj. zpracovavala by jako argumenty shellovske prikazy i s jejich pripadnymi parametry. Kod nize spousti shellovsky prikaz
prikaz1 | prikaz2 dvajako
./pipe prikaz1 prikaz 2a ja bych chtel aby to fungovalo napriklad jako:
./pipe prikaz1 -abcde prikaz2 -a -b -cNapadaji me jenom same drsne zpusoby jak to vyresit, pomoci ruzneho parsovani, ale tim by se kod stal prilis robustni
int main(int argc,char **argv) {
int fd[2];
pipe(fd);
pid_t childpid;
pid_t pid = fork();
if (childpid == -1)
{
perror("Error forking...");
exit(1);
}
if (pid == -1)
return -1;
if (pid == 0)
{
close(fd[1]); //close write to pipe, in child
dup2(fd[0], STDIN_FILENO); // Replace stdin with the read end of the pipe
close(fd[0]); // Don't need another copy of the pipe read end hanging about
execlp(argv[2],argv[2],argv[3],NULL);
}
else
{
close(fd[0]); //close read from pipe, in parent
dup2(fd[1], STDOUT_FILENO); // Replace stdout with the write end of the pipe
close(fd[1]); // Don't need another copy of the pipe write end hanging about
execlp(argv[1],argv[1],NULL);
}
return EXIT_SUCCESS;
}
Řešení dotazu:
./pipe command1 -s -tisicem param etru %DELIMITER% command2 -s -jinym --tisicem par ametru
cat test a druhý xargs file, nedokážete určit, kde to správně rozdělit (záměrně jsem vybral taková jména, kde každé slovo je zároveň i jméno existujícího programu).
Nejjednodušší řešení je to zauvozovkovat, tedy aby se ten program i s parametry předával jako jeden parametr, a místo execlp použít system:
./pipe "prikaz1 -abcde" "prikaz2 -a -b -c"
@Vysledny kod vypada takto:
int main(int argc,char *argv[]) {
if (argc < 2) {
printf("Programme must be run with with arguments and using pipe shell symbol as a delimiter!\n"
"For example: ./pipe ls -la @ grep -v .c\n");
exit(1);
}
int count;
int fd[2];
char command1[50];
char command2[50];
char arguments1[50];
char arguments2[50];
strcpy(command1, argv[1]);
strcpy(arguments1, " ");
strcpy(arguments2, " ");
count = 2;
for (; count < argc; count++) {
if (strcmp(argv[count], "@") == 0) {
break;
}
strcat(arguments1, argv[count]);
strcat(arguments1, " ");
}
arguments1[strlen(arguments1)-1] = '\0'; //removing ending space
strcat(command1, arguments1);
strcpy(command2, argv[count+1]);
count += 2;
for ( ; count < argc; count++) {
strcat(arguments2, argv[count]);
strcat(arguments2, " ");
}
arguments1[strlen(arguments2)-1] = '\0';
strcat(command2, arguments2);
pipe(fd);
pid_t pid = fork();
if (pid == -1)
return -1;
if (pid == 0) {
close(fd[1]); //close write to pipe, in child
dup2(fd[0], STDIN_FILENO); // Replace stdin with the read end of the pipe
close(fd[0]); // Don't need another copy of the pipe read end hanging about
system(command2);
}
else {
close(fd[0]); //close read from pipe, in parent
dup2(fd[1], STDOUT_FILENO); // Replace stdout with the write end of the pipe
close(fd[1]); // Don't need another copy of the pipe write end hanging about;
system(command1);
}
return EXIT_SUCCESS;
}
mkfifo()?
fopen: No such file or directoryDOsavadni kod:
int main(int argc,char *argv[]) {
if (argc < 2) {
printf("Programme must be run with with arguments and using pipe shell symbol as a delimiter!\n"
"For example: ./pipe ls -la @ grep -v .c\n");
exit(1);
}
int count, fw, fr;
char command1[50];
char command2[50];
char arguments1[50];
char arguments2[50];
strcpy(command1, argv[1]);
strcpy(arguments1, " ");
strcpy(arguments2, " ");
count = 2;
for (; count < argc; count++) {
if (strcmp(argv[count], "@") == 0) {
break;
}
strcat(arguments1, argv[count]);
strcat(arguments1, " ");
}
arguments1[strlen(arguments1)-1] = '\0'; //removing ending space
strcat(command1, arguments1);
strcpy(command2, argv[count+1]);
count += 2;
for ( ; count < argc; count++) {
strcat(arguments2, argv[count]);
strcat(arguments2, " ");
}
arguments1[strlen(arguments2)-1] = '\0';
strcat(command2, arguments2);
mkfifo(FIFO_FILE, S_IFIFO|0666);
pid_t pid = fork();
if (pid == -1)
return -1;
if (pid == 0) {
//close(fifo); //close write to pipe, in child
//dup2(fifo, STDIN_FILENO); // Replace stdin with the read end of the pipe
//close(fifo); // Don't need another copy of the pipe read end hanging about
if(fr = fopen(FIFO_FILE, "r") == NULL) {
perror("fopen");
exit(1);
}
dup2(fr, STDIN_FILENO);
close(fr);
system(command2);
}
else {
//close(fifo); //close read from pipe, in parent
//dup2(fifo, STDOUT_FILENO); // Replace stdout with the write end of the pipe
//close(fifo); // Don't need another copy of the pipe write end hanging about;
if(fw = fopen(FIFO_FILE, "w") == NULL) {
perror("fopen");
exit(1);
}
dup2(fw, STDOUT_FILENO);
close(fw);
system(command1);
}
return EXIT_SUCCESS;
}
Tiskni
Sdílej: