我必须在Ubuntu的C程序中使用mkfifo
。但是当我运行代码时出错:no such file or directory
。
我认为问题是因为我没有设置panel_fifo
环境变量。但我不知道我怎么能这样做。
以下是我用来测试此方法的代码:
char *myfifo="./sock/myfifo";
if (mkfifo(myfifo,0777)<0)
perror("can't make it");
if (fd=open(myfifo,O_WRONLY)<0)
perror("can't open it");
我用以下代码编译:
gcc gh.c -o gh
当我跑步时,我收到此错误消息:
can't make it:no such file or directory
can't open it:no such file or directory
答案 0 :(得分:3)
有关创建目录路径的常规C(和C ++)解决方案,请参阅How can I create a directory tree in C++/Linux。对于眼前的问题,这是过度的,直接调用mkdir()
就足够了。
const char dir[] = "./sock";
const char fifo[] = "./sock/myfifo";
int fd;
if (mkdir(dir, 0755) == -1 && errno != EEXIST)
perror("Failed to create directory: ");
else if (mkfifo(fifo, 0600) == -1 && errno != EEXIST)
perror("Failed to create fifo: ");
else if ((fd = open(fifo, O_WRONLY)) < 0)
perror("Failed to open fifo for writing: ");
else
{
…use opened fifo…
close(fd);
}
我假设您包含了正确的标头,当然(<errno.h>
,<fcntl.h>
,<stdio.h>
,<stdlib.h>
,<sys/stat.h>
,{ {1}},我相信。)
请注意打开FIFO的<unistd.h>
中分配的括号。