0

我正在尝试将字符串发送到另一个程序,但我在使用 O_WRONLY | 时遇到问题 O_NONBLOCK,如果我用 O_RDWR 替换它,程序可以正常工作,但我想知道是否有一种方法可以在不使用 O_RDWR 的情况下发送/读取字符串。现在它出于某种原因返回一个空字符串。

作家:

 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
 #include <fcntl.h>

 #define MAX_LINE 1024

 int main(int argc, char **argv)
 {
     char line[MAX_LINE];
     int pipe;
     printf("Enter line: \n");
     fgets(line, MAX_LINE, stdin);
     pipe = open("link1", O_WRONLY | O_NONBLOCK);
     write(pipe, line, strlen(line));
     system("./run"); //executing the reader
     close(pipe);
     return 0;
 }

读者:

 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
 #include <fcntl.h>

 #define MAX_BUF 1024

 int main(int argc, char **argv)
 {
     int fd;
     char * link1 = "link1";
     char buf[MAX_BUF];
     fd = open(link1, O_RDONLY | O_NONBLOCK);
     read(fd, buf, MAX_BUF);
     printf("%s\n", buf);
     close(fd);
     return 0;
 }
4

1 回答 1

3

你是先运行阅读器吗?如果在写入器尝试只写入时打开 FIFO 以供读取,则打开将失败。

Open Group 手册页

打开设置了 O_RDONLY 或 O_WRONLY 的 FIFO 时: 如果设置了 O_NONBLOCK: 只读的 open() 将立即返回。如果当前没有进程打开文件进行读取,则仅用于写入的 open() 将返回错误。

于 2013-09-30T18:31:49.660 回答