Cześć, chciałbym w programie wykorzystać do komunikacji między procesami łącze FIFO. Dodatkowo mam przykładowy kod takiego programu.
Chciałem jednak sam to napisać. I teraz jak zrobiłem po swojemu to nie działa, więc coraz więcej kodu brałem z przykładu. I teraz mam kod, który wygląda praktycznie tak samo jak ten w przykładzie a nie chce działać. Może ktoś na forum jest bardziej spostrzegawczy i podpowie co robię źle.
Kod przykładu który działa:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/stat.h>
void client(){
FILE *fp;
char string[100];
while(1){
fp = fopen("my_fifo", "r");
fgets(string, 100, fp);
printf("Otrzymalem: %s\n\n", string);
fclose(fp);
}
}
void server(){
FILE *fp;
char string[100];
while(1){
fp = fopen("my_fifo", "w");
fprintf(stdout, "Podaj ciag znakow: ");
scanf("%s", string);
fputs(string, fp);
fclose(fp);
sleep(1);
}
}
int main(void){
umask(0);
mkfifo("my_fifo", 0666);
if(fork()){
server();
}else{
client();
}
return 0;
}
Mój kod:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/stat.h>
void fifo_reader() {
FILE *file;
char bufor[100];
while(1) {
file = fopen("my_fifo", "r");
fgets(bufor, 100, file);
printf("Otrzymalem: %s", bufor);
fclose(file);
}
}
void fifo_writer() {
FILE *file;
char bufor[100];
while(1) {
file = fopen("my_fifo", "w");
fprintf(stdout, "Podaj ciag znakow: ");
scanf("%s", bufor);
fputs(bufor, file);
fclose(file);
sleep(1);
}
}
int main(void) {
umask(0);
mkfifo("my_fifo", 0666);
if (fork()) {
fifo_writer();
}
else {
fifo_reader();
}
return 0;
}