gpt4 book ai didi

c - 运行 mkfifo 的程序不起作用

转载 作者:行者123 更新时间:2023-11-30 21:00:27 31 4
gpt4 key购买 nike

我正在尝试使用 mkfifo 命令在 linux 下的 c 上创建一个命名管道。但是当我运行该程序时,我要么收到“没有这样的文件或目录”错误,要么什么也没有(控制台不显示任何内容)

这是我的代码:

#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;
}

我还在学习,我不明白我做错了什么。感谢您的帮助。

最佳答案

为了使命名管道有用,必须有人读取它,有人必须编写它。通常这将是两个独立的程序。你的程序就是作者。读者在哪里?

如果没有读取器,程序在O_WRONLY 打开时阻塞是正常的。因此,当您的程序看起来什么也没做时,它实际上只是在执行以下操作:

pipe = open("/tmp/myfifo", O_WRONLY);

等待读者出现。

在另一个终端中,运行 cat/tmp/myfifo。读者的存在将使作者取得进步。您的程序将唤醒并进入 Enter line 提示符,您输入的内容将被 cat 读取并写入第二个终端。

另一个问题是文件名不一致。在一个地方,您编写的 "tmp/myfifo" 没有前导斜杠,因此您尝试在当前工作目录内的 tmp 目录中创建命名管道。如果该 tmp 目录不存在,则结果是No such file or directory

关于c - 运行 mkfifo 的程序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41144488/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com