问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux c 的 open(文件路径,O_WRONLY | O_CREAT) 里面的与运算为什么可以实现打不开就创建

发布网友 发布时间:2022-04-23 09:02

我来回答

5个回答

热心网友 时间:2023-10-08 23:56

open 函数可以打开或创建一个文件。
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
返回值:成功返回新分配的文件描述符,出错返回-1并设置errno
在Man Page中open 函数有两种形式,一种带两个参数,一种带三个参数,其实在C代码
中open 函数是这样声明的:
int open(const char *pathname, int flags, ...);
最后的可变参数可以是0个或1个,由flags 参数中的标志位决定,见下面的详细说明。
pathname 参数是要打开或创建的文件名,和fopen 一样,pathname 既可以是相对路径也可以是绝
对路径。flags 参数有一系列常数值可供选择,可以同时选择多个常数用按位或运算符连接起
来,所以这些常数的宏定义都以O_开头,表示or。
必选项:以下三个常数中必须指定一个,且仅允许指定一个。
O_RDONLY 只读打开
O_WRONLY 只写打开
O_RDWR 可读可写打开
以下可选项可以同时指定0个或多个,和必选项按位或起来作为flags 参数。可选项有很多,这
里只介绍一部分,其它选项可参考open(2)的Man Page:
O_APPEND 表示追加。如果文件已有内容,这次打开文件所写的数据附加到文件的末尾而不
覆盖原来的内容。
O_CREAT 若此文件不存在则创建它。使用此选项时需要提供第三个参数mode ,表示该文件
的访问权限。
O_EXCL 如果同时指定了O_CREAT,并且文件已存在,则出错返回。
O_TRUNC 如果文件已存在,并且以只写或可读可写方式打开,则将其长度截断
(Truncate)为0字节。
O_NONBLOCK 对于设备文件,以O_NONBLOCK 方式打开可以做非阻塞I/O(Nonblock I/O).

热心网友 时间:2023-10-08 23:56

因为第二个参数:O_WRONLY | O_CREAT
O_CREAT:如果打不开就创建

O_WRONLY | O_CREAT中间使用“|”,所以支持打不开就创建

热心网友 时间:2023-10-08 23:57

在C中,常常使用二进制位来做控制标志,这个办法使得高效且代码短小,在头文件fcntl.h中,可以见到O_WRONLY的定义值是"01",八位二进制就是"00000001",O_CREAT是八进制"0100",二进制就是"01000000",竖线“|”不是“与”,是逐位“或”运算,O_RWONLY|O_CREAT合起来就是"01000001“,这两个"1"的位置并不冲突,在这里,open()函数得到的值是编译器已经合并好了的值"01000001",open()函数可以根据这两个独立的二进制"位"知道是读写打开或者创建。

热心网友 时间:2023-10-08 23:57

这个是位或,不是与。位或、位与是这样计算的。
如:二进制的 010 | 001 结果是 011,而 010 & 001 结果就是0了。
O_WRONLY 和 O_CREAT 的关系就相当于上面的 010 和 001。他们位或的值不是0,位与的值就是0了。0表示什么都不做。用了位或后,就在一个整型的值上设置了不同的标志位,open函数会检测对应的标志位,如果该标志位设置为1了,就执行对应的操作。
O_CREAT的意思就是创建的意思,在这里就是将 创建文件 的标志位设置为1,这样open函数无法写这个文件的时候就会创建他。

热心网友 时间:2023-10-08 23:58

#include <fcntl.h>

int open(const char *pathname, int oflag, ... /*
mode_t mode */ );

We show the third argument as ..., which is the ISO C way to specify that the number and types of the remaining arguments may vary. For this function, the third argument is used only when a new file is being created, as we describe later. We show this argument as a comment in the prototype.

The pathname is the name of the file to open or create. This function has a multitude of options, which are specified by the oflag argument. This argument is formed by ORing together one or more of the following constants from the <fcntl.h> header:

O_RDONLY
Open for reading only.

O_WRONLY
Open for writing only.

O_RDWR
Open for reading and writing.

Most implementations define O_RDONLY as 0, O_WRONLY as 1, and O_RDWR as 2, for compatibility with older programs.

One and only one of these three constants must be specified. The following constants are optional:

O_APPEND
Append to the end of file on each write. We describe this option in detail in Section 3.11.

O_CREAT
Create the file if it doesn't exist. This option requires a third argument to the open function, the mode, which specifies the access permission bits of the new file. (When we describe a file's access permission bits in Section 4.5, we'll see how to specify the mode and how it can be modified by the umask value of a process.)

O_EXCL
Generate an error if O_CREAT is also specified and the file already exists. This test for whether the file already exists and the creation of the file if it doesn't exist is an atomic operation. We describe atomic operations in more detail in Section 3.11.

O_TRUNC
If the file exists and if it is successfully opened for either write-only or readwrite, truncate its length to 0.

O_NOCTTY
If the pathname refers to a terminal device, do not allocate the device as the controlling terminal for this process. We talk about controlling terminals in Section 9.6.

O_NONBLOCK
If the pathname refers to a FIFO, a block special file, or a character special file, this option sets the nonblocking mode for both the opening of the file and subsequent I/O. We describe this mode in Section 14.2.
linux c 的 open(文件路径,O_WRONLY | O_CREAT) 里面的与运算为什么可以...

O_CREAT 若此文件不存在则创建它。使用此选项时需要提供第三个参数mode ,表示该文件 的访问权限。O_EXCL 如果同时指定了O_CREAT,并且文件已存在,则出错返回。O_TRUNC 如果文件已存在,并且以只写或可读可写方式打开,则将其长度截断 (Truncate)为0字节。O_NONBLOCK 对于设备文件,以O_NONBLOCK 方式打...

Linux下编程O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR 为什么不是&amp;&amp;而是一...

这里要用位或,而不是与。在头文件fcntl.h中,可以见到O_WRONLY的定义值是"01",八位二进制就是"00000001",O_CREAT是八进制"0100",二进制就是"01000000",竖线“|”不是“与”,是逐位“或”运算,O_RWONLY|O_CREAT合起来就是"01000001“,这两个"1"的位置并不冲突,在这里,open()函数...

LINUX下这个文件打开open为什么打开失败啊

O_CREAT,加这个选项的时候,要指定创建文件的模式,fp_log=open(log_name,O_WRONLY|O_APPEND|O_CREAT, 0666)

Linux下编程O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR 为什么不是_百度知 ...

O_WRONLY|O_CREAT 表示打开方式,是只写,创建方式。S_IRUSR|S_IWUSR 表示不同用户权限,usr表示拥有者可以读写 表示不同的作用。

请问linux中用O_TRUNC | O_APPEND 打开一个文件到底是追加还是从头开始...

你一开始以截短方式打开的文件,然后又设置成追加,期间没有再次打开,所以就是追加,而不是从头来,我理解的就是你open打开已经截断了,后面再操作就不再截短为0了,只是打开的一瞬间起作用

linux 下C语言文件读取问题

if (fp=open("22.txt",O_WRONLY|O_CREAT|O_APPEND,0666)&lt;0)=优先级最低,所以,文件打开成功返回一个文件标识符,小于0不成立,所以,返回0,fp的值就是0,下面write写的时候写到0(标准输入)上面了,经过我测试,确实是写到屏幕上来了,有可能相当于键盘输入的,但是在VC下测试,不会输出到...

嵌入式代码open("/dev/ttyso",o_RDWR/O_NOCTTY/O_NDELAY);这个代码说...

O_WRONLY 只写打开。O_RDWR 读、写打开。O_APPEND 每次写时都加到文件的尾端。O_CREAT 若此文件不存在则创建它。使用此选择项时,需同时说明第三个参数mode,用其说明该新文件的存取许可权位。O_EXCL 如果同时指定了O_CREAT,而文件已经存在,则出错。这可测试一个文件是否存在,如果不存在则创建...

m_fileHandle.open(O_WRONLY | O_CREAT | O_APPEND);什么意思??

文件的打开方式 读写 创建 追加

hi~你不知道的vim小秘密

open("/tmp/test/.aminglinux.txt.swp", O_RDONLY) = -1 ENOENT (No such file or directory) open("/tmp/test/.aminglinux.txt.swp", O_RDWR|O_CREAT|O_EXCL, 0600) = 3 open("/tmp/test/.aminglinux.txt.swx", O_RDONLY) = -1 ENOENT (No such file or directory) open("/tmp/test/....

linuxc读取文件,解析linuxc读取文件

一、C语言库函数打开文件:fopen读写(一般对应成对使用):fgetc---fputcfgets---fputsfread---fwrite关闭文件:fclose 二、Linux系统函数打开文件:open读写(一般对应成对使用):read---write关闭文件:close c语言中read函数的用法?函数原型定义:ssize_tread(intfd,void*buf,size_tcount);2/8 ...

linuxc语言sleep函数 linuxc编程实战 linuxc判断eth0 linuxc一站式编程pdf Linuxc linuxc语言 linuxc编程视频教程 linuxc编程案例 O/A
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...新南站到郑州市东明路和纬五路交叉口的肿瘤医院,最少转乘,大概多长... 合肥济民肿瘤医院到合肥汽车南站怎么坐公交车? 合肥凤凰肿瘤医院下高铁后怎么走打的大概要多少钱 什么是爱情,我又迷糊了!哎…… 三个月宝宝拉绿便便怎么回事 GB/T276-1994 圆柱滚子轴承 6311-2rs/z1 这个型号各字母所代表的意思... 6208轴承最高限速多少 为什么我在电脑上下载的photoshop软件都是花钱的,要不打不开。怎么才 ... 6204轴承是什么类型的轴承? 爱情天梯是真的吗 护士有创意的群名称有哪些? 在哪有私募基金排行? ‘措’是什么意思 措辞有误是什么意思? 为什么linux下面的open函数有2种原型?这样做有什么好处呢?求正解。。。 谁帮我想个有创意的群名字 道理正当,措辞严肃是什么意思 linux open 函数中的 mode_t mode 是什么? 有创意的管理层群名称是什么? 措辞是什么意思 措辞的意思举个例子? linux下的API:open函数调用设备驱动的一个问题 措辞是什么意思,还有严厉措辞 报考二建的45个专业是什么? Linux驱动里open函数中为什么可以为空 二级建造师有那些专业可以报? 关于linux驱动 字符驱动设备中open函数的问题。。。 注意你的措辞是什么意思? Linux环境编程:打开open函数创建的文件,然后对此文件进行读写操作。。。 有创意的群名称同学群有哪些? 措辞巧妙什么意思 arm linux中open函数返回值问题 11个人的创意群名,,急急!!! 这样的措辞是什么意思? linux c程序调用open函数为什么两个或三个 帮我设计一个群名和群名片~聊天的群啊~就是那种无厘头精神~要有创意哦~ 08年公募基金和私募基金的收益率排名是怎样的? 给家长的保证书怎么写 关于linux 编程 中open函数小问题 为什么显示不了文本内容? 但如果把write函数去掉 给家长的一封信咋写 几句话? linux系统中,对普通文件的操作,关于对fopen和open的区别 小米手机充电器线里面是红色还是紫色? 请问各位大虾,谁知道目前哪家的基金年收益率最高? 是多少?(私募公募都算)。 孩子给家长的一封信怎么写? 私募排排网:怎么挑选私募基金 小米cc9pro充电线头是红色的还是白色的? oppor7s原装充电器规格 小米5splus原装充电器和充电线是什么样子? OPPOr7s原装充电器多少钱? 公募基金收益排名最新出炉,你家基金有没有上榜