mknod(2)要求FreeBSD上的超级用户使用什么呢?

时间:2010-10-23 22:12:34

标签: c++ porting freebsd mknod

我从Linux移植到FreeBSD并且遇到了错误的错误::: mknod()

[EINVAL]           Creating anything else than a block or character spe-
                   cial file (or a whiteout) is not supported.

但我也在之前的手册页上看到它:

 The mknod() system call requires super-user privileges.

那么什么是一个很好的替换调用才能在Linux和FreeBSD上运行?

我的代码段发生了这种情况:

mode_t mode
  = S_IFREG | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;

if (::mknod(_resolvedName, mode, 0)) {

我的目标是使用正确的权限创建一个空文件。

2 个答案:

答案 0 :(得分:2)

根据mknod(2)的Linux手册页:

  

POSIX.1-2001说:“ mknod()的唯一可移植用途是创建FIFO特殊文件。如果模式不是S_IFIFO或dev不是0,则mknod的行为()未指定。“

因此,您以这种方式使用它是不可移植的,不推荐使用。

然而,

open(2)似乎具有您需要的功能,并且可以便携地创建零大小的文件。它接受第mode_t类型的第三个参数,您可以使用该参数设置权限。

答案 1 :(得分:1)

  

我的目标是使用正确的权限创建一个空文件。

为什么不:

std::fstream(_resolvedName); // Temporary object opens and closes in the
                             // same statement thus creating empty file.