Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 166 (pdf).
Blíží se prázdniny a než se rozutečete k moři, je na čase se opět sejít na Virtuální Bastlírně - pravidelném setkání elektroniků, ajťáků, bastlířů a obecně nadšenců do techniky. Co si pro vás strahovští bastlíři připravili tentokrát? Určitě proberou blížící se Linux Days i další události. U softwaru se chvíli zdrží a poví si kupříkladu o tom, jak se zbavit Bambu Cloudu, ale nepřijít o možnost ovládat tiskárnu na dálku. Řeč dojde i na AI,
… více »Vývojáři postmarketOS vydali verzi 26.06 tohoto operačního systému pro chytré telefony vycházejícího z optimalizovaného a nakonfigurovaného Alpine Linuxu s vlastními balíčky. Přehled novinek v příspěvku na blogu. Na výběr jsou 4 uživatelská rozhraní: GNOME, KDE Plasma Mobile, Phosh a Sxmo.
Byla vydána nová verze 2.55.0 distribuovaného systému správy verzí Git. Přispělo 100 vývojářů, z toho 33 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání.
Craig Loewen na blogu Microsoftu oznámil veřejnou preview verzi WSL kontejnerů, tj. linuxových kontejnerů ve Windows Subsystem for Linux (WSL). Spouští se příkazem wslc.exe.
Byla vydána (𝕏, Bluesky) nová verze 2026.2 linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux (Wikipedie). Přehled novinek se seznamem 9 nových nástrojů v oficiálním oznámení na blogu.
Grafická aplikace Krokiet/Czkawka pro vyhledávání a odstraňovaní nepotřebných souborů (duplicitní soubory, prázdné složky, podobné obrázky, podobná videa, poškozené soubory a další) byla vydána ve verzi 12.0.0. Podrobný přehled novinek v příspěvku na Medium. Jedná se o poslední verzi frontendu Czkawka GTK nad Czkawka Core. Uživatelům se doporučuje migrovat na frontend Krokiet postavený nad frameworkem Slint. Představena byla aplikace Cedinia pro Android využívající Czkawka Core. Dostupná je jako APK pro ruční instalaci.
Po téměř třech letech od vydání verze 9 byla vydána nová verze 10 linuxové distribuce Mageia (Wikipedie). Přehled novinek v poznámkách k vydání.
Nourish (GitHub) je nový správce oken pro Linux. Tradiční plochy nahrazuje nekonečným plátnem a posouváním a přibližováním. Využívá vlastní kompozitor pro Wayland s názvem y5. Videoukázka.
|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: