【发布时间】:2013-05-15 07:43:29
【问题描述】:
语言:C 操作系统:Ubuntu
我只是尝试使用以下命令创建一个 FIFO 命名管道:
state = mknod("pipe.txt", S_IFIFO | 0666, 0);
问题是我总是将 state 的值设为 -1(意味着它已经失败)而不是 0。
perror 返回 'pipe.txt: 文件存在'
我不知道我应该如何调试这样的问题或可能是什么原因,希望任何人的代码指导我出了什么问题。
(注意:文件 pipe.txt 与源文件位于同一路径。)
【问题讨论】:
-
"mknod() 成功时返回零,如果发生错误则返回 -1(在这种情况下,errno 设置得当)。
errno是什么?如果你使用perror,从一开始就很容易看到。 -
检测到
mknod()失败后使用perror("mknod: pipe.txt")。 -
当
mkfifo这样的系统调用返回-1时,表示有错误。要获得错误,您需要查看errno。要打印errno中错误代码的可用字符串版本,请使用strerror获取可打印字符串,或使用perror直接打印。但是,您应该只检查errnoiff 函数失败(即返回-1或NULL或它指定为失败的返回值)。 -
你对 perror 的看法是对的,我得到的错误是:'pipe.txt:文件存在'。可能是我不明白事情是如何工作的,但我认为该文件应该存在,这不是整个想法吗?
-
Popokoko,不,如果您点击我的回答 (linux.die.net/man/2/mknod) 中的链接,您会发现它不应该存在。
mknod在文件系统空间中创建一个条目。