命名管道 - c中的FIFO

时间:2017-04-18 15:05:44

标签: c linux macos named-pipes mkfifo

我只想测试一些使用命名管道的程序。我找到了一些例子,但他们并没有按我的意愿工作。

以下代码仅适用于我打开" myfifo"在开始写之前阅读。如果我以前不打开阅读,它会创建fifo,但不会打开它。我认为它不应该像那样工作。

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

#define MAX_LINE 80

int main(int argc, char** argv) {
   char line[MAX_LINE];
   int pipe;

   mkfifo("/tmp/myfifo", S_IRWXU);
   printf("Created fifo\n");

   //int rfd = open("/tmp/myfifo", O_RDONLY|O_NONBLOCK);   //works with that

   pipe = open("/tmp/myfifo", O_WRONLY);  // open a named pipe
   printf("Opened\n");

   printf("Enter line: ");  // get a line to send
   fgets(line, MAX_LINE, stdin);

   write(pipe, line, strlen(line));   // actually write out the data and close the pipe

   close(pipe);    // close the pipe
   return 0;
}

此外,我尝试测试此示例:https://stackoverflow.com/a/2789967/7709706并且它也无法打开fifo。我不知道为什么。

我使用的是MacOS和Linux。

0 个答案:

没有答案