C中打开文件功能中的标志和模式之间的关系是什么

时间:2018-12-17 00:23:04

标签: c io

我是C语言的初学者,对C语言中打开文件功能中的标志和模式参数有疑问 所以C的open函数是:

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

和标志的一些宏是:

  • O_RDONLY:只读
  • O_WRONLY:仅写
  • O_RDWR:读写

和模式位类似:

enter image description here

我不明白的是, 假设我们有一个开放功能,如下:

fd = Open("foo.txt", O_RDONLY, S_IWOTH);

所以O_RDONLY指定我们只能读取文件,而S_IWOTH指定任何人都可以写入该文件,这不是彼此矛盾吗?

1 个答案:

答案 0 :(得分:2)

标志决定此时在打开此文件 时要应用的属性(我们称其为“会话”)-这会影响您的处理方式打开文件时(或更准确地说,可以使用文件描述符执行操作)。

模式决定在打开过程中创建文件的属性-这会影响以后任何人打开文件的方式。

您的特定示例(尽管使用正确的open而非Open):

fd = open("foo.txt", O_RDONLY, S_IWOTH);

并不是真正相关的,因为不会在没有O_CREAT标志(a)的情况下创建文件

但是,如果您提供了O_CREAT,则完全可以接受创建文件,该文件允许任何人对其进行写入,但是要以只读模式在此会话中打开该文件。


(a)某些系统具有 other 标志,这些标志在某些情况下可能会创建文件。例如,Linux具有O_TMPFILE标志。