程序 运行 mkfifo 不工作
Program running mkfifo doesn't work
我正在尝试使用 mkfifo 命令在 linux 下的 c 上创建一个命名管道。但是当我 运行 程序时,我要么得到 "no such file or directory" 错误,要么完全没有(控制台不显示任何内容)
这是我的代码:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#define MAX_LINE 80
int main(int argc, char** argv) {
int create;
//mkfifo("/tmp/myfifo", 0666);
create = mkfifo("tmp/myfifo", 0666);
if (create==-1)
{
printf("error%s", strerror(errno));
}
char line[MAX_LINE];
int pipe;
pipe = open("/tmp/myfifo", O_WRONLY);
if (pipe==-1)
{printf("error");
}
printf("Enter line: ");
fgets(line, MAX_LINE, stdin);
write(pipe, line, strlen(line));
sleep (100);
close(pipe);
return 0;
}
我还在学习,我不明白我做错了什么。感谢您的帮助。
要使命名管道有用,必须有人阅读它,有人必须编写它。通常这将是 2 个独立的程序。你的程序是作者。 reader 在哪里?
如果没有reader,程序阻塞在O_WRONLY
打开是正常的。所以当你的程序看起来什么都不做时,它实际上只是在做这个:
pipe = open("/tmp/myfifo", O_WRONLY);
等待 reader 出现。
在另一个终端中,运行 cat /tmp/myfifo
。 reader 的存在将使作者取得进步。您的程序将唤醒并转到 Enter line
提示符,您输入的内容将由 cat
读取并写入第二个终端。
另一个问题是您的文件名不一致。在一个地方,您写的 "tmp/myfifo"
没有前导斜杠,因此您试图在当前工作目录内的 tmp
目录中创建命名管道。如果 tmp
目录不存在,结果将是 No such file or directory
。
我正在尝试使用 mkfifo 命令在 linux 下的 c 上创建一个命名管道。但是当我 运行 程序时,我要么得到 "no such file or directory" 错误,要么完全没有(控制台不显示任何内容)
这是我的代码:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#define MAX_LINE 80
int main(int argc, char** argv) {
int create;
//mkfifo("/tmp/myfifo", 0666);
create = mkfifo("tmp/myfifo", 0666);
if (create==-1)
{
printf("error%s", strerror(errno));
}
char line[MAX_LINE];
int pipe;
pipe = open("/tmp/myfifo", O_WRONLY);
if (pipe==-1)
{printf("error");
}
printf("Enter line: ");
fgets(line, MAX_LINE, stdin);
write(pipe, line, strlen(line));
sleep (100);
close(pipe);
return 0;
}
我还在学习,我不明白我做错了什么。感谢您的帮助。
要使命名管道有用,必须有人阅读它,有人必须编写它。通常这将是 2 个独立的程序。你的程序是作者。 reader 在哪里?
如果没有reader,程序阻塞在O_WRONLY
打开是正常的。所以当你的程序看起来什么都不做时,它实际上只是在做这个:
pipe = open("/tmp/myfifo", O_WRONLY);
等待 reader 出现。
在另一个终端中,运行 cat /tmp/myfifo
。 reader 的存在将使作者取得进步。您的程序将唤醒并转到 Enter line
提示符,您输入的内容将由 cat
读取并写入第二个终端。
另一个问题是您的文件名不一致。在一个地方,您写的 "tmp/myfifo"
没有前导斜杠,因此您试图在当前工作目录内的 tmp
目录中创建命名管道。如果 tmp
目录不存在,结果将是 No such file or directory
。