代码之家  ›  专栏  ›  技术社区  ›  WilliamKF

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

  •  1
  • WilliamKF  · 技术社区  · 15 年前

    [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 回复  |  直到 15 年前
        1
  •  2
  •   greyfade    15 年前

    根据Linux手册页 mknod(2) :

    POSIX.1-2001规定:“ mknod()的唯一可移植用途是创建FIFO特殊文件。

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

    open(2) 不过,它似乎具有您所需的功能,并将创建一个大小为零的可移植文件。它接受第三个类型的参数 mode_t ,您可以使用它设置权限。

        2
  •  1
  •   Loki Astari    15 年前

    为什么不:

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