gpt4 book ai didi

c++ - mknod(2) 要求 FreeBSD 上的 super 用户使用什么代替?

转载 作者:行者123 更新时间:2023-11-30 03:09:35 30 4
gpt4 key购买 nike

我正在从 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)) {

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

最佳答案

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

POSIX.1-2001 says: "The only portable use of mknod() is to create a FIFO-special file. If mode is not S_IFIFO or dev is not 0, the behavior of mknod() is unspecified."

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

但是,

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

关于c++ - mknod(2) 要求 FreeBSD 上的 super 用户使用什么代替?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4006348/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com