如何使用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)