【Linux】open函数的参数和作用

【Linux】open函数的参数和作用一、open函数用来干什么open函数在Linux下一般用来打开或者创建一个文件,我们可以根据参数来定制我们需要的文件的属性和用户权限等各种参数。二、open函数的定义和参数我们首先来看下open函数在Linux下的定义#include#include#includeintopen(constchar*pathnam

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

一、open函数用来干什么

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

二、open函数的定义和参数

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

#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);

头文件

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

#include <sys/types.h>//这里提供类型pid_t和size_t的定义
#include <sys/stat.h>
#include <fcntl.h>

返回值

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配合使用。

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

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

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


相关推荐

  • redis 缓存技术与memcache的最大差别

    redis 缓存技术与memcache的最大差别

    2021年12月5日
    36
  • 判断一个字符串是否是回文字符串「建议收藏」

    判断一个字符串是否是回文字符串「建议收藏」#include&lt;string.h&gt;#include&lt;stdio.h&gt;main(){ chara[40];//定义一个存放待判断的字符数组 inti=0,len; printf("pleaseinputyourstring:(length&lt;40):"); gets(a);//逐个读取a数组中的字符 len=strlen(a);//计…

    2022年5月10日
    40
  • pycharm如何创建新项目_Python3

    pycharm如何创建新项目_Python3步骤一:打开PyCharm步骤二:点击CreateNewProjectLocation:项目存储的目录【建议新建一个根目录,放置开发的所有项目,命名最好用英文(服务器仅仅识别英文)】步骤三:点击下方的小三角,配置解释器第一个选项是虚拟环境第二个选项是本地的【也就是我们所需要的】(图中已标出,第一次使用应为空值)步骤四:导入python.exe【注意:如果没有找到…

    2022年8月29日
    6
  • java面试题库app_java的面试宝典

    java面试题库app_java的面试宝典https://blog.csdn.net/tongshuixu8025/article/details/79949157[添加链接描述]加粗样式

    2022年9月19日
    5
  • status:searchingServer_physical distancing

    status:searchingServer_physical distancingTitleSpatialInformationGuidedConvolutionforReal-TimeRGBDSemanticSegmentation标题空间信息引导的卷积用于实时RGBD语义分割pdfhttps://arxiv.org/pdf/2004.04534v1.pdf摘要  已知3D空间信息对于语义分割任务是有益的。大多数现有方法都…

    2022年9月2日
    6
  • Java 并发:volatile 关键字解析「建议收藏」

    Java 并发:volatile 关键字解析「建议收藏」在Java并发编程中,要想使并发程序能够正确地执行必须要保证三条原则:原子性、可见性和有序性。只要有一条原则没有被保证,就有可能导致线程安全性问题。volatile关键字被用来保证可见性,即保证共享变量的内存可见性以解决缓存一致性问题,同时其还会禁止进行指令重排序。volatile关键字主要用于使其他线程及时感知共享变量的修改并保证使用变量最新值,例如,用于修饰状态标记量和Double-Check(双重检查)中。

    2022年7月11日
    20

发表回复

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

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