我是C语言的初学者,对C语言中打开文件功能中的标志和模式参数有疑问 所以C的open函数是:
int open(char *filename, int flags, mode_t mode);
和标志的一些宏是:
O_RDONLY
:只读O_WRONLY
:仅写O_RDWR
:读写和模式位类似:
我不明白的是, 假设我们有一个开放功能,如下:
fd = Open("foo.txt", O_RDONLY, S_IWOTH);
所以O_RDONLY
指定我们只能读取文件,而S_IWOTH
指定任何人都可以写入该文件,这不是彼此矛盾吗?
答案 0 :(得分:2)
标志决定此时在打开此文件 时要应用的属性(我们称其为“会话”)-这会影响您的处理方式打开文件时(或更准确地说,可以使用文件描述符执行操作)。
模式决定在打开过程中创建文件的属性-这会影响以后任何人打开文件的方式。
您的特定示例(尽管使用正确的open
而非Open
):
fd = open("foo.txt", O_RDONLY, S_IWOTH);
并不是真正相关的,因为不会在没有O_CREAT
标志(a)的情况下创建文件 。
但是,如果您提供了O_CREAT
,则完全可以接受创建文件,该文件允许任何人对其进行写入,但是要以只读模式在此会话中打开该文件。>
(a)某些系统具有 other 标志,这些标志在某些情况下可能会创建文件。例如,Linux具有O_TMPFILE
标志。