Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux syscall open()位掩码_C_Linux_Linux Kernel_System Calls - Fatal编程技术网

linux syscall open()位掩码

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模式下打开此行检查文件是否只有以下属性可用:

我想知道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模式下打开

此行检查文件是否只有以下属性可用:
O_RDONLY
:只读文件
O_WRONLY
:只写文件
O_create
:如果文件不存在,则创建该文件
O_RDWR
:读写文件
O_TRUNC
:如果文件已经存在并且是常规文件,则 模式允许写入(即O_RDWR或O_WRONLY),它将 截断为长度0

O_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
不是基于位的标志时,该注释才有意义。

它检查该值是否设置了不在这些值中的位,并且