我从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)) {
我的目标是使用正确的权限创建一个空文件。
答案 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.