如何使用Posix上的C创建具有权限的目录
我正在尝试编写一个创建目录的简单C程序(mkdir clone。)。 这是我到目前为止:
#include #include // mkdir #include // perror mode_t getumask() { mode_t mask = umask(0); umask (mask); return mask; } int main(int argc, const char *argv[]) { mode_t mask = getumask(); printf("%i",mask); if (mkdir("trial",mask) == -1) { perror(argv[0]); exit(EXIT_FAILURE); } return 0; }
这段代码用d---------
创建目录但是我希望用drwxr-xr-x
像mkdir那样创建它吗? 我在这做错了什么?
编辑:这是我的工作解决方案:
int main(int argc, const char *argv[]) { if (mkdir("trial",0777) == -1) { perror(argv[0]); exit(EXIT_FAILURE); } return 0; }
根据umask设置正确的权限会自动处理。 因此我只需要使用完全权限调用mkdir,并根据当前的umask进行切割。
正如Eric所说,umask是您获得的实际权限模式的补充。 因此,不应将掩码本身传递给mkdir()
,而应将0777-mask
传递给mkdir()
。
你似乎误解了umask
的用途。 它设置/检索进程的文件模式创建掩码,该掩码又用于关闭您在mkdir
等调用中指定的文件模式中的位,如下所示(pseduo-code):
real_mode = requested_mode & ~umask
因此,在您的代码中,由于您传入了umask本身的值,因此最终将权限指定为零,这正是您所看到的。
相反,您应该在调用mkdir
指定所需的权限,如下所示:
mkdir("trial", 0755)