我必须在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的中的赋值周围的括号。

10-08 04:04