mkfifo()和mknod()之间的区别

Vid*_*dhi 6 c linux pipe

创建命名管道时mkfifo()和mknod()有什么区别?

我试着搜索但是得不到满意的答案.

Jon*_*ler 12

使用mkfifo()是标准化和便携式的.mknod()一般来说,使用它是不可移植的 - 它是POSIX的一部分(尽管在这个答案的早期版本中有相反的声明).POSIX规范说mkfifo()应该是首选.否则,由mkfifo()和创建的FIFO之间没有区别mknod().

请注意,mknod()除了FIFO之外,还可以用于创建其他设备类型.它可以创建块特殊和字符特殊设备.从前很(非常非常)很久以前,mknod()用于创建目录太-在之前有一个天mkdir()rmdir()系统调用.创建目录后,必须使用link()两次在新目录中创建...条目.(并且你必须拥有root权限才能使用它,因此mkdirrmdir命令是SUID root.)文件系统现在更加可靠,因为它不再是游戏的一部分.

参考:版本7 Unix - 大约1979年.

  • 嗯,我的 `mknod` 手册页说 «POSIX.1-2001 说:“`mknod()` 的唯一可移植用途是创建一个 FIFO 特殊文件。如果 `mode` 不是 `S_IFIFO` 或 `dev` 是不是 `0`,`mknod()` 的行为是未指定的。”»,所以看起来 `mknod` 和 `S_IFIFO` * 确实是标准的。http://pubs.opengroup.org/onlinepubs/9699919799/functions/mknod.html 证实了这一点,并警告说“在制作 FIFO 特殊文件时,`mkfifo()` 函数优于此函数。” (2认同)