【发布时间】:2020-08-01 03:05:34
【问题描述】:
我在理解 open 函数中的参数时遇到了一些麻烦,特别是在创建输出文件的上下文中。我不太了解标志和文件权限(函数中的第二个和第三个参数)的作用。例如,如果我有文件权限 00200(用户有写权限)和标志 O_RDONLY(只读),那么我可以读文件还是写文件?
【问题讨论】:
标签: c file file-permissions
我在理解 open 函数中的参数时遇到了一些麻烦,特别是在创建输出文件的上下文中。我不太了解标志和文件权限(函数中的第二个和第三个参数)的作用。例如,如果我有文件权限 00200(用户有写权限)和标志 O_RDONLY(只读),那么我可以读文件还是写文件?
【问题讨论】:
标签: c file file-permissions
open的签名如下:
int open(const char *pathname, int flags, mode_t mode);
有三组“权限”在起作用:文件本身的权限、标志和模式。
文件本身的权限(例如 00200 表示只有用户可以写入)指定操作系统允许程序执行的操作。
当您指定标志时,表明您想要对文件执行什么操作。例如,如果文件对您是只读的(例如 rwxr-xr-x 而您不是所有者),您将被允许使用 O_RDONLY 打开文件。如果您尝试使用O_RDWR 或O_WRONLY 打开文件,您将在errno 中收到EPERM(不允许操作)错误。
mode 参数仅在您创建 new 文件时相关,例如当您打开一个不存在的文件时1 和标志 @987654331 @ 已指定。该文件是在文件系统上创建的,其权限由mode & ~umask 提供(有关详细信息,请参阅man 2 umask)。
1 当然,包含目录必须存在,并且您必须对该目录具有写入+执行权限。
【讨论】: