Проблема в том что написав, скомпилив и запустив такую вещь:
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <linux/stat.h>
#define FIFO_FILE "MYFIFO"
int main(void){
FILE *fp_c=0, *fp_s=0;
char readbuf[80];
pid_t pid;
umask(0);
mknod(FIFO_FILE, S_IFIFO-0666, 0);
pid=fork();
printf("Pid: %d\n", pid);
if(pid==-1){
perror("fork");
}
else{
if(pid==0){
printf("%d", pid);
fp_c=fopen(FIFO_FILE, "w");
printf("%d", fp_c);
fputs("Hello, Parent!", fp_c);
fclose(fp_c);
exit(0);
}
else{
fp_s=fopen(FIFO_FILE, "r");
fgets(readbuf, 80, fp_s);
printf("Recieved string: %s\n", readbuf);
fclose(fp_s);
}
}
unlink(FIFO_FILE);
return 0;
}Получаю
Код: Выделить всё
Segmentation faultНемного исследовав этот ОГРОМНЫЙ проект
Код: Выделить всё
fputs("Hello, Parent!", fp_c);
fgets(readbuf, 80, fp_s);
fclose();Последняя же вызывает подобную ошибку в любой проге даже не связанной с FIFO.
Компилил:
Код: Выделить всё
gcc -o mfifo mfifo.cИ еще: как может fork() возвращать при успешном выполнении 0 и PID нового процесса?