我只想测试一些使用命名管道的程序。我找到了一些例子,但他们并没有按我的意愿工作。
以下代码仅适用于我打开" 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。