簡體   English   中英

如何用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

這是因為目錄襪子不存在。

在終端中:

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$ 

現在注意所有程序都已完成並退出(在所有終端中)

你試試

myfifo("./sock/myfifo", ...)

你得到

沒有相應的文件和目錄

這是ENOENT

然后,您想查找相關文檔並在man 3 mkfifo找到以下內容:

錯誤

[...]

ENOENT路徑名中的目錄組件不存在或為懸掛的符號鏈接。

從所有這一切可能會混淆./sock不存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM