Bitwig Studio (Wikipedie) bylo vydáno ve verzi 6. Jedná se o proprietární multiplatformní (macOS, Windows, Linux) digitální pracovní stanici pro práci s audiem (DAW).
Společnost Igalia představila novou linuxovou distribuci (framework) s názvem Moonforge. Jedná se o distribuci určenou pro vestavěné systémy. Vychází z projektů Yocto a OpenEmbedded.
Google Chrome 146 byl prohlášen za stabilní. Nejnovější stabilní verze 146.0.7680.71 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 29 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
D7VK byl vydán ve verzi 1.5. Jedná se o fork DXVK implementující překlad volání Direct3D 3 (novinka), 5, 6 a 7 na Vulkan. DXVK zvládá Direct3D 8, 9, 10 a 11.
Bylo vydáno Eclipse IDE 2026-03 aneb Eclipse 4.39. Představení novinek tohoto integrovaného vývojového prostředí také na YouTube.
Ze systému Slavia pojišťovny uniklo přibližně 150 gigabajtů citlivých dat. Jedná se například o pojistné dokumenty, lékařské záznamy nebo přímou komunikaci s klienty. Za únik může chyba dodavatelské společnosti.
Sněmovna propustila do dalšího kola projednávání vládní návrh zákona o digitální ekonomice, který má přinést bezpečnější on-line prostředí. Reaguje na evropské nařízení DSA o digitálních službách a upravuje třeba pravidla pro on-line tržiště nebo sociální sítě a má i víc chránit děti.
Meta převezme sociální síť pro umělou inteligenci (AI) Moltbook. Tvůrci Moltbooku – Matt Schlicht a Ben Parr – se díky dohodě stanou součástí Meta Superintelligence Labs (MSL). Meta MSL založila s cílem sjednotit své aktivity na poli AI a vyvinout takovou umělou inteligenci, která překoná lidské schopnosti v mnoha oblastech. Fungovat by měla ne jako centralizovaný nástroj, ale jako osobní asistent pro každého uživatele.
Byla vydána betaverze Fedora Linuxu 44 (ChangeSet), tj. poslední zastávka před vydáním finální verze, která je naplánována na úterý 14. dubna.
Open source router Turris Omnia NG Wired je v prodeji. Jedná se o Turris Omnia NG bez Wi-Fi. Je připraven pro zamontování do racku.
http://www.abclinuxu.cz/poradna/programovani/show/373050Potreboval bych tutez funkcionalitu implementovat s
mkfifo(). Cili aby mi to po spusteni programu s arametry a delimiterem:
./pipe ls -la @ grep -v .cprovedlo to stejne jakov shellu. Postup bude pravdepodobne stejny, budou tam dva openy asi. Zatim jsem se dostal k hrubemu kodu nize. Nefunguje mi tam ale otevreni fopen():
fopen: No such file or directoryCelkem tapu jak ty prikazy poskladat, aby mi to fungovalo. Budu rad za jakoukoliv radu. Diky. Dosavadni kod (puvodne to byl kod pro nepojmenovanou rouru, stare radky jsou vykomentovane):
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;
}
Řešení dotazu:
man errno
, a jeste bych poradil man 3 getopt
návratová hodnota fopen je typu FILE
FILE*
./fifo ls -la @ grep -v .cuz po otevreni roury pro zapis
fw = open(fifo_name, O_WRONLY);hazi chybu:
grep: (standardní vstup): Chybný popisovač souboruCoz je divne, ze mi to hlasi zrovna grep pri otevreni roury teprve por zapis... To same potom pri otevreni roury pro cteni:
ls: chyba při zápisu: Roura přerušena (SIGPIPE)Promenne fr ani fw se mi neinicailzuji, po open() maji hodnotu 0. Pri kompilaci pak dostavam pochopitelne:
fifo.c: In function ‘main’: fifo.c:66:18: warning: ‘fw’ may be used uninitialized in this function [-Wuninitialized] fifo.c:82:18: warning: ‘fr’ may be used uninitialized in this function [-Wuninitialized]DOsavadni kod je takovyto:
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: ./fifo ls -la @ grep -v .c\n");
exit(1);
}
int count, fw, fr, status;
char command1[50];
char command2[50];
char arguments1[50];
char arguments2[50];
char* fifo_name = "/tmp/myfifo";
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);
status = mkfifo(fifo_name, S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH);
if(status == -1) {
perror( "Mkfifo failed" );
exit(1);
}
pid_t pid = fork();
if (pid == -1) {
return -1;
}
if (pid == 0) {
close(fw);
fr = open(fifo_name, O_RDONLY);
unlink(fifo_name);
if(fr == -1) {
printf("Could not open the pipe for reading.\n");
exit(1);
}
dup2(fr, STDIN_FILENO);
close(fr);
system(command2);
unlink(fifo_name);
}
else {
close(fr);
fw = open(fifo_name, O_WRONLY);
if(fw == -1) {
printf("Could not open the pipe for writting.\n");
exit(1);
}
dup2(fw, STDOUT_FILENO);
close(fw);
system(command1);
unlink(fifo_name);
}
return EXIT_SUCCESS;
}
Takze chce to vyresit deskriptory, mozna pouzit jinou fce nez open. Jenze kdyz pouziju fopen(), tak da se nejak jejich vysledek typy FILE* predelat na int a pouzit jako filedeskriptor? To je jediny mozny co me napada...
fileno(), ktera z FILE* promenne vrati file descriptor, ale stejne mi porad vraci nulu a chybove hlasku pro otevreni pomoci fopen() zustavaji stejne... (davam sem jen cast kodu). Proc mi fileno nic nevraci?
int fdr, fdw;
FILE* fr;
FILE* fw;
status = mkfifo(fifo_name, S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH);
if(status == -1) {
perror( "Mkfifo failed" );
exit(1);
}
pid_t pid = fork();
if (pid == -1) {
return -1;
}
if (pid == 0) {
close(fdw);
fr = fopen(fifo_name, "r");
if(fr == NULL) {
perror("Could not open the pipe for reading: \n");
exit(1);
}
fdr = fileno(fr);
dup2(fdr, STDIN_FILENO);
close(fdr);
system(command2);
unlink(fifo_name);
}
else {
close(fdr);
fw = fopen(fifo_name, "w");
if(fw == NULL) {
perror("Could not open the pipe for writting: \n");
exit(1);
}
fdw = fileno(fw);
dup2(fdw, STDOUT_FILENO);
close(fdw);
system(command1);
unlink(fifo_name);
}
if (pid == -1) {
return -1;
}
if (pid == 0) {
fdr = open(fifo_name, O_RDONLY);
if(fdr == -1) {
perror("Could not open the pipe for reading: \n");
exit(1);
}
dup2(fdr, STDIN_FILENO);
close(fdr);
system(command2);
unlink(fifo_name);
}
else {
fdw = open(fifo_name, O_WRONLY);
if(fdw == -1) {
perror("Could not open the pipe for reading: \n");
exit(1);
}
dup2(fdw, STDOUT_FILENO);
close(fdw);
system(command1);
unlink(fifo_name);
}
Akorat bych potreboval jeste poradit, jak misto system() pouzit nejakou exec fci.
Me bohuzel nic jednoducheho nenapada. Ja si dokazu zpracovat vstup na command
retezec a arguments retezec, napriklad ls (command) a -la (arguments), mam to i
v kodu na abicku... jenze exec si neumi poradit se stringy typu "-l -a"
napr:
./fifo ls -l -a @ ....
execlp(command,command,"arguments,NULL) vypada rozepsane jako
execlp("ls","ls","-l -a",NULL);
Nenapada me zadne elegantni reseni. jen nacitat argumenty a testovat, zda
zacinaji"-", pokud ano, tak oddelat minus a spojit s predchozim do jedne velke
sady argumentu... pak jeste ale nejak vyresit parametry bez "-" a jejich
pripadne stridani.. coz nevim moc jak udelat ...a pocet, cim vic takovychto
stridani tim vic by se musela exec fce rozrystat o dalsi a dalsi parametry,
nebo ja fakt nevim, su uz z toho vystavenej...zkratka na zadne nerobustni
reseni nejsem schopnej prijit :(
Tiskni
Sdílej: