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

最佳答案

这是因为目录袜不存在。
在终端中:

christian@fujiu1404:~/tmp/t2$ ls
t2.c
christian@fujiu1404:~/tmp/t2$ cat t2.c
#include <fcntl.h>

main() {

int fd;
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");

}
christian@fujiu1404:~/tmp/t2$ cc t2.c
christian@fujiu1404:~/tmp/t2$ ./a.out
can't make it: No such file or directory
can't open it: No such file or directory
christian@fujiu1404:~/tmp/t2$ mkdir sock
christian@fujiu1404:~/tmp/t2$ ./a.out

注意这个程序还没有完成,但是你的FIFO确实存在。
现在在第二个终端,把一个字符串放入fifo
christian@fujiu1404:~/tmp/t2$ ls -l sock/
total 0
prwxrwxr-x 1 christian christian 0 May 27 06:45 myfifo
christian@fujiu1404:~/tmp/t2$ echo abc >sock/myfifo

注意回声也被暂停
现在在第三个终端,从fifo读取
christian@fujiu1404:~/tmp/t2$ cat sock/myfifo
abc
christian@fujiu1404:~/tmp/t2$

注意现在所有程序完成并退出(在所有终端中)

10-05 20:13