繁体   English   中英

模式如何影响 Linux 中新创建文件的权限?

[英]How does mode affect the permisson on newly created files in Linux?

我是 Linux 新手,仍在努力理解 Linux 中的权限控制是如何工作的。 open函数原型是这样的:

int open(char *filename, int flags, mode_t mode);

让我们有以下代码:

fd = open("foo.txt", O_CREAT|O_RDWR, S_IRUSR)

假设文件“foo.txt”之前不存在,因此上面的语句将创建一个名为“foo.txt”的文件,执行此open语句的当前进程可以读取和写入该文件。 但是在此进程终止后,如果另一个进程启动并尝试打开此文件。 下面是我的问题:

S_IRUSR由于文件是在第一次open调用时使用S_IRUSR (所有者可以读取此文件)创建的,是否意味着即使我作为文件的所有者,如果我启动一个新进程再次打开此文件,我也只能读取这个文件,我不能写这个文件,我的理解对吗? 如果我的理解是正确的,那么所有者创建他们以后无法完全访问它的东西是否明智/可行?

Q2-如果我上面的理解是正确的,那么在第二次调用中open一个新进程。 我只能这样称呼:

fd = open("foo.txt", O_RDONLY)  // uses flags like O_WRONLY or O_RDWR will throw an error?

由于第一次open将模式指定为S_IRUSR ,在后续调用中映射到O_RDONLY ,我的理解是否正确?

正确,如果您创建具有S_IRUSR权限的文件(通常以八进制编写为0400 ),那么您将无法打开该文件进行写入。 尝试这样做将失败并将 errno 设置为EACCES

这非常实用,因为它为您提供了一种保护您不想意外覆盖的文件的方法,只要权限保持不变。 但是,作为所有者,您有权稍后使用chmod()系统调用更改权限。 所以这并不是说你已经永久失去了写入该文件的能力; 您可以随时将这种能力归还给自己。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM