如何在C中制作一个fifo?
How to make a fifo in C?
我必须在 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
因为目录sock不存在
在终端中:
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
注意echo也暂停了
现在在第三个终端中,读取 fifo
christian@fujiu1404:~/tmp/t2$ cat sock/myfifo
abc
christian@fujiu1404:~/tmp/t2$
注意现在所有程序都完成并退出(在所有终端中)
你试试
myfifo("./sock/myfifo", ...)
你得到
no such file or directory
也就是 ENOENT
.
然后你想查阅相关文档,在man 3 mkfifo
中找到以下内容:
ERRORS
[...]
ENOENT A directory component in pathname does not exist or is a dangling symbolic link.
从所有这些可以推断 ./sock
不存在。
我必须在 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
因为目录sock不存在
在终端中:
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
注意echo也暂停了
现在在第三个终端中,读取 fifo
christian@fujiu1404:~/tmp/t2$ cat sock/myfifo
abc
christian@fujiu1404:~/tmp/t2$
注意现在所有程序都完成并退出(在所有终端中)
你试试
myfifo("./sock/myfifo", ...)
你得到
no such file or directory
也就是 ENOENT
.
然后你想查阅相关文档,在man 3 mkfifo
中找到以下内容:
ERRORS
[...]
ENOENT A directory component in pathname does not exist or is a dangling symbolic link.
从所有这些可以推断 ./sock
不存在。