1

我想mknod在我的代码中使用来创建一个文件,但是man说,

mknod() 的唯一可移植用途是创建一个 FIFO 专用文件。如果 mode 不是 S_IFIFO 或 dev 不是 0,则 mknod() 的行为未指定。

这是否意味着 mknod 不是真正可移植的,我应该使用其他方式来创建函数?打电话open和即时close怎么样?哪种方式更安全?

4

2 回答 2

7

mknod不是用于创建文件。它用于创建设备节点。可移植应用程序永远不需要创建设备节点,因为它们是否存在、它们是什么以及它们是如何实现/编号的都是实现细节

mknod历史上也允许您创建 fifos(也许是普通文件?),但是有标准接口用于此:mkfifo用于 fifos,和creat(或openwith O_CREAT)用于普通文件。

于 2010-12-28T14:10:05.883 回答
1

如果您阅读该段的其余部分,您将看到:

However, nowadays one should never use mknod() for this purpose;
one should use mkfifo(3), a function especially defined for this purpose.

所以POSIX.1-2001这里所说的已经过时了。我会忽略它。mknodLinux 系统中的初始化脚本仍在使用。

于 2010-12-28T13:24:24.233 回答