我必须在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
最佳答案
有关创建目录路径的一般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>
,<unistd.h>
,if
,,我相信)。注意打开fifo的中的赋值周围的括号。