linux open详解,Linux系统open函数详解[通俗易懂]

linux open详解,Linux系统open函数详解[通俗易懂]Linux系统中open函数主要作用就是打开和创建文件,可以根据参数来定制我们需要的文件的属性和用户权限等各种参数,下面良许教程网为大家分享一下Linux系统open函数具体使用方法。一、open函数用来干什么open函数在Linux下一般用来打开或者创建一个文件,我们可以根据参数来定制我们需要的文件的属性和用户权限等各种参数。二、open函数的定义和参数我们首先来看下open函数在Linux下的…

大家好,又见面了,我是你们的朋友全栈君。

Linux系统中open函数主要作用就是打开和创建文件,可以根据参数来定制我们需要的文件的属性和用户权限等各种参数,下面良许教程网为大家分享一下Linux系统open函数具体使用方法。

20653d271de1988123a6cb82c65881a5.png

一、open函数用来干什么

open函数在Linux下一般用来打开或者创建一个文件,我们可以根据参数来定制我们需要的文件的属性和用户权限等各种参数。

二、open函数的定义和参数

我们首先来看下open函数在Linux下的定义

#include #include #include int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);123456

头文件

如上所示,我们在使用open函数时候需要添加的头文件是

#include //这里提供类型pid_t和size_t的定义

#include #include 123

返回值

open函数的返回值如果操作成功,它将返回一个文件描述符,如果操作失败,它将返回-1。

参数含义:

1、pathname:

在open函数中第一个参数pathname是指向想要打开的文件路径名,或者文件名。我们需要注意的是,这个路径名是绝对路径名。文件名则是在当前路径下的。

2、flags:

flags参数表示打开文件所采用的操作,我们需要注意的是:必须指定以下三个常量的一种,且只允许指定一个

O_RDONLY:只读模式

O_WRONLY:只写模式

O_RDWR:可读可写

以下的常量是选用的,这些选项是用来和上面的必选项进行按位或起来作为flags参数。

O_APPEND 表示追加,如果原来文件里面有内容,则这次写入会写在文件的最末尾。

O_CREAT 表示如果指定文件不存在,则创建这个文件

O_EXCL 表示如果要创建的文件已存在,则出错,同时返回 -1,并且修改 errno 的值。

O_TRUNC 表示截断,如果文件存在,并且以只写、读写方式打开,则将其长度截断为0。

O_NOCTTY 如果路径名指向终端设备,不要把这个设备用作控制终端。

O_NONBLOCK 如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继 I/O设置为非阻塞模式(nonblocking mode)

以下三个常量同样是选用的,它们用于同步输入输出

O_DSYNC 等待物理 I/O 结束后再 write。在不影响读取新写入的数据的前提下,不等待文件属性更新。

O_RSYNC read 等待所有写入同一区域的写操作完成后再进行

O_SYNC 等待物理 I/O 结束后再 write,包括更新文件属性的 I/O

3、mode:

mode参数表示设置文件访问权限的初始值,和用户掩码umask有关,比如0644表示-rw-r–r–,也可以用S_IRUSR、S_IWUSR等宏定义按位或起来表示,详见open(2)的Man Page。要注意的是,有以下几点

文件权限由open的mode参数和当前进程的umask掩码共同决定。

第三个参数是在第二个参数中有O_CREAT时才作用,如果没有,则第三个参数可以忽略

三、open函数与fopen函数区别

从来源来分,这两者很好区分:

open函数是Unix下系统调用函数,操作成功返回的是文件描述符,操作失败返回的是-1,

fopen是ANSIC标准中C语言库函数,所以在不同的系统中调用不同的内核的API,返回的是一个指向文件结构的指针。

同时open函数没有缓冲,fopen函数有缓冲,open函数一般和write配合使用,fopen函数一般和fwrite配合使用。

总结

至此关于Linux系统open函数的使用方法分享结束,大家如果对open函数的使用方法还有疑问可以通过评论区将问题提交给我们。

以上就是

8eb782702a61236a1304505b81c48847.png

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141387.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • HDU ACM 1078 FatMouse and Cheese 记忆化+DFS[通俗易懂]

    HDU ACM 1078 FatMouse and Cheese 记忆化+DFS

    2022年1月31日
    57
  • oracle可以更改表名,sql – 更改Oracle表名

    oracle可以更改表名,sql – 更改Oracle表名我正在尝试在oracle中更改表名.我首先运行此脚本来声明表CREATETABLECUSTOMER(C_IDNUMBER(6,0),C_LASTVARCHAR2(25),C_FIRSTvarchar2(25),C_MIchar(1),C_DOBDATE,C_ADDRESSvarchar2(100),C_CITYvarchar2(35),C_STATEchar(2),C_ZIP…

    2022年5月17日
    38
  • Ffmpeg安装_linux离线安装ffmpeg

    Ffmpeg安装_linux离线安装ffmpeg目录安装包下载解压安装包配置环境变量总结安装包下载作为音视频处理重要软件ffmpeg,是一定要装好的。windows安装包下在链接:资源包地址解压安装包下载安装包后解压到需要的目录。配置环境变量找到控制面板->点击系统->点击高级系统设置->点击环境变量配置解压或文件夹路劲到Path变量中。一直确认后,点击win+r打开cmd。输入ffmpeg-i命令验证一下是..

    2025年11月9日
    3
  • Java8新特性 stream流常用方法

    Java8新特性 stream流常用方法Java8API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。StreamAPI可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。这种风格将要处理的元素集合看作一种流,流在管道中传输,并且可以在管道的节点上进行处理,…

    2022年10月5日
    2
  • CentOS镜像下载「建议收藏」

    CentOS镜像下载「建议收藏」CentOS6系统安装1、首先打开网易开源镜像站:http://mirrors.163.com/当然,大家也可以使用阿里开源镜像站:http://mirrors.aliyun.com/2、点击进入centos目录。3、因为我们选择安装centos6.5版本系统,所以点击进入6.5/目录4、我们打开里面的readme文件,找到下载地址:http://vault.cento…

    2022年6月9日
    116
  • android开发之AIDL用法_进程间通信原理详解

    转自http://blog.csdn.net/saintswordsman/article/details/5130947欢迎阅读本文,你能关注本文,你知道你需要进程间通信、需要AIDL(以及Binder),那么可以默认你对这些概念已经有了一些了解,你(大致)知道它们是什么,它们有什么用,所以为了节约大家的眼力和时间,在此我不复制粘贴网上泛滥的博客或者翻译冗长的android文档。

    2022年3月10日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号