linux syscall open()位掩码
我想知道Linux系统调用linux syscall open()位掩码,c,linux,linux-kernel,system-calls,C,Linux,Linux Kernel,System Calls,我想知道Linux系统调用int-open(const-char*pathname,int-flags)中以下代码行的用途是什么: 此行检查文件是否只有以下属性可用: O_RDONLY:只读文件 O_WRONLY:只写文件 O_create:如果文件不存在,则创建该文件 O_RDWR:读写文件 O_TRUNC:如果文件已经存在并且是常规文件,则 模式允许写入(即O_RDWR或O_WRONLY),它将 截断为长度0 O_APPEND:文件在APPEND模式下打开此行检查文件是否只有以下属性可用:
int-open(const-char*pathname,int-flags)
中以下代码行的用途是什么:
此行检查文件是否只有以下属性可用:
O_RDONLY
:只读文件O_WRONLY
:只写文件O_create
:如果文件不存在,则创建该文件O_RDWR
:读写文件O_TRUNC
:如果文件已经存在并且是常规文件,则
模式允许写入(即O_RDWR或O_WRONLY),它将
截断为长度0O_APPEND
:文件在APPEND模式下打开此行检查文件是否只有以下属性可用:O_RDONLY
:只读文件O_WRONLY
:只写文件O_create
:如果文件不存在,则创建该文件O_RDWR
:读写文件O_TRUNC
:如果文件已经存在并且是常规文件,则
模式允许写入(即O_RDWR或O_WRONLY),它将
截断为长度0O_APPEND
:在APPEND模式下打开文件时,不知道该O_RDONLY
、O_RDONLY
和O_RDWR
的实际值,实际上无法确定该代码的实际功能
代码
if (flags & ~(O_RDONLY | O_WRONLY | O_CREAT | O_RDWR | O_TRUNC | O_APPEND))
{
return -1;
}
在实际系统实现之外是不可移植的,严格来说是无效的,该系统实现可以访问和控制标志的实际值,标志O_RDONLY
、O_WRONLY
和O_RDWR
是非位标志:
标签的oflag
值由以下列表中定义的按位包含或标志构成应用程序应在LAG的值中精确指定以下前五个值(文件访问模式)中的一个:
O_EXEC
仅为执行打开(非目录文件)。如果将此标志应用于目录,则结果未指定
O_RDONLY
仅供阅读
O_RDWR
开放阅读和写作。如果此标志应用于FIFO,则结果未定义
O_搜索
只打开目录进行搜索。如果将此标志应用于非目录文件,则结果未指定
O_WRONLY
只对写作开放
由于这些标志不是基于位的,而是基于实际值的,因此在不知道它们在使用的系统上的实际值的情况下,无法通过逐位操作检测它们的存在或不存在
此代码使用了多个标志,违反了POSIX规范:
O_RDONLY | O_WRONLY | O_CREAT | O_RDWR | O_TRUNC | O_APPEND
从理论上讲,它可以产生一个无意义的位值,该值不能用于对任何内容进行有效的按位比较
偶数解决了open()
标志的非位标志性质:
基本原理
在历史实现中,O_RDONLY
的值为零。因此,无法检测是否存在O_RDONLY
和其他选项。未来的实现应将O_RDONLY
和O_WRONLY
编码为位标志,以便:
O_RDONLY | O_WRONLY==O_RDWR
只有当O_RDONLY
、O_WRONLY
和O_RDWR
不是基于位的标志时,该注释才有意义。在不知道该O_RDONLY
的实际值的情况下,O_WRONLY
和O_RDWR
被分配,实际上无法确定该代码的实际功能
代码
if (flags & ~(O_RDONLY | O_WRONLY | O_CREAT | O_RDWR | O_TRUNC | O_APPEND))
{
return -1;
}
在实际系统实现之外是不可移植的,严格来说是无效的,该系统实现可以访问和控制标志的实际值,标志O_RDONLY
、O_WRONLY
和O_RDWR
是非位标志:
标签的oflag
值由以下列表中定义的按位包含或标志构成应用程序应在LAG的值中精确指定以下前五个值(文件访问模式)中的一个:
O_EXEC
仅为执行打开(非目录文件)。如果将此标志应用于目录,则结果未指定
O_RDONLY
仅供阅读
O_RDWR
开放阅读和写作。如果此标志应用于FIFO,则结果未定义
O_搜索
只打开目录进行搜索。如果将此标志应用于非目录文件,则结果未指定
O_WRONLY
只对写作开放
由于这些标志不是基于位的,而是基于实际值的,因此在不知道它们在使用的系统上的实际值的情况下,无法通过逐位操作检测它们的存在或不存在
此代码使用了多个标志,违反了POSIX规范:
O_RDONLY | O_WRONLY | O_CREAT | O_RDWR | O_TRUNC | O_APPEND
从理论上讲,它可以产生一个无意义的位值,该值不能用于对任何内容进行有效的按位比较
偶数解决了open()
标志的非位标志性质:
基本原理
在历史实现中,O_RDONLY
的值为零。因此,无法检测是否存在O_RDONLY
和其他选项。未来的实现应将O_RDONLY
和O_WRONLY
编码为位标志,以便:
O_RDONLY | O_WRONLY==O_RDWR
只有当O_RDONLY
、O_WRONLY
和O_RDWR
不是基于位的标志时,该注释才有意义。它检查该值是否设置了不在这些值中的位,并且