如何在C中制作一个fifo特殊文件?

时间:2015-05-26 15:38:38

标签: c linux ubuntu fifo

我必须在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

1 个答案:

答案 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>中分配的括号。