下面是一個例子代碼:
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
void child(void)
{
int fd = 0;
if ((fd = open("./fifo.txt", O_WRONLY)) < 0) {
return;
}
write(fd, "hello world!", 12);
}
void parent(void)
{
int fd = 0;
if ((fd = open("./fifo.txt", O_RDONLY)) < 0) {
return;
}
char buf[36] = {0};
read(fd, buf, 36);
printf("%s\n", buf);
}
int main(void)
{
pid_t pid = 0;
if (mkfifo("./fifo.txt", S_IRUSR | S_IWUSR) < 0) {
printf("Can not create fifo\n");
return 1;
}
pid = fork();
if (pid == 0) {
printf("child process\n");
child();
} else if (pid < 0) {
printf("fork error\n");
return -1;
}
parent();
}
用[strace的(1)](http://man7.org/linux/man-pages/man1/strace.1.html)上程序。並在錯誤處調用[perror(3)](http://man7.org/linux/man-pages/man3/perror.3.html)。 –
「打開一個用於正常讀取塊的FIFO,直到某個其他進程打開相同的FIFO進行寫入,反之亦然。」 https://linux.die.net/man/3/mkfifo – maxik