首页 > 编程知识 正文

linux open函数,open函数的用法

时间:2023-05-05 11:28:42 阅读:49304 作者:2365

简单来说,open是UNIX系统(包括LINUX、Mac等)的系统调用函数,与c语言库函数fopen区分开来。

# include fcntl.h # include unistd.hint open (const char * pathname,intflags ); intopen (常数char * pathname,intflags,mode_t mode ); 返回值:如果成功,则返回文件描述符,否则返回-1

函数参数:

pathname :打开文件的路径名

flags :控制打开文件的模式

mode :用于设置创建文件的权限。 仅在flags中有O_CREAT时有效。

返回值:

调用成功时返回文件描述符软盘

如果调用失败,则返回-1,修正errno

flags参数详细信息: O_RDONLY :只读模式O_WRONLY :只读模式O_RDWR :可写模式

上述三种模式不能同时用于flags参数,但需要其中一种模式。 以下参数是可选的:

O_APPEND :以后每次写入文件时,都将当前文件偏移量设置为文件末尾,但在读取文件时不受影响

O_CREAT :必须在文件不存在时创建,并使用mode选项。 指示对新文件的访问权限

O_EXCL :如果要打开的文件存在,将出现错误。 O_TRUNC与O_CREAT参数一起打开文件时,必须清除文件的内容

O_NOCTTY :如果打开的文件是终端设备,则不会将此设备设置为进程的控制终端

O_NONBLOCK :如果打开的文件是管道、块设备文件或字符设备文件,则后续的输入/输出操作将设置为无阻塞

o _ sync :等待每个write的物理I/O操作完成,包括通过write操作更新文件属性所需的I/O。

open函数返回的文件描述符fd必须是未使用的最小文件描述符。 利用此特性,可以更改三个文件描述符(0、1和2 )指向的文件。 默认情况下,进程打开三个文件描述符: 0、1和2,指向键盘和显示器设备文件。 如果在open之前执行close(1),然后调用open函数,则返回最小的未使用软盘,即1。

如果文件不存在并使用O_CREAT标志,即创建文件,则在创建文件时会授予文件一定的权限,但此权限并不限制在过程后对该文件的操作。 例如,如果创建文件时授予的权限为0555,则所有用户都没有写入的权限。 但是,可以在程序之后向文件进行写入。

如果以八进制形式给出了mode参数,要纠正错误(例如0777.),以前我认为权限数字前的0表示八进制的含义,但实际情况并非如此。 前面的0表示权限限定位,即set-user-id位、set-group-id位和sticky位这3位权限。

打开和打开的区别

如果以可写方式fopen文件,如果该文件不存在,则会自动创建该文件;但是,如果要打开该文件,则必须显式O_CREAT。 如果不存在,则以错误返回

# include stdlib.h # include stdio.h # include string.h # include fcntl.h # include unistd.hint main (const char * msg=' ) char buf[128]={0}; FD=open(test.txt ),O_WRONLY|O_CREAT|O_APPEND,0666 ); if(FD0 ) Perror ) ' open '; 退出(1; }write(FD、msg、Strlen ) (msg ); 关闭(软盘); FD=open('test.txt ',O_RDONLY ); if(FD0 ) Perror ) ' open '; 退出(1; }读取(FD、buf、sizeof ) buf ); printf(read:%s )、buf ); 返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。