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

一、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函数的使用方法还有疑问可以通过评论区将问题提交给我们。

以上就是

linux open详解,Linux系统open函数详解相关推荐

  1. python average函数详解_python基础之函数详解

    Python基础之函数详解 一.函数的定义 到现在为止,我们已经掌握了Python的基本语法和数据类型等相关基础知识了,以进行一个项目的编写了,这个时候,就会发现,很多代码需要我们进行复制粘贴,这简直 ...

  2. linux系统getopt函数详解

    getopt()函数就是用来解析命令行参数 调用形式一般如下: while((c = getopt(argc, argv, "xy:z::")) != -1){ switch(c) ...

  3. Linux卸载搜狐,双系统删除教程详解:Windows(linux)双系统,教你如何删除其中一个!...

    3. 随后,点击"引导",可以设置开机的启动系统了 4. 假设我们要删除win10系统,那么我们就将win10操作系统开机引导删除,选择win10然后选择"删除" ...

  4. linux执行lsof命令_linux系统 lsof命令详解

    简介 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控 ...

  5. linux给内存卡分区,Android系统手机内存卡分区详解

    这两天刷了2.2版本之后换了个内存卡,问题来了,需要把内存卡分区,下面就让把这两天分区的经验分享一下.不对的地方希望各位能指正,感谢.这里以我的国行G2作为说明,刷的是啊兴的2.2版本.参照了G1的分 ...

  6. Linux系统调用八、link系列API函数详解

  7. python average函数详解_Python内置函数详解——总结篇

    https://www.cnblogs.com/sesshoumaru/category/894935.html 2个多月来,将3.5版本中的68个内置函数,按顺序逐个进行了自认为详细的解析,现在是时 ...

  8. ajaxsetup获取ajax的url_jQuery.ajaxSetup() 函数详解

    该函数用于更改jQuery中AJAX请求的默认设置选项.之后执行的所有AJAX请求,如果对应的选项参数没有设置, 将使用更改后的默认设置. //设置AJAX的全局默认选项 $.ajaxSetup( { ...

  9. 10_Systemlnit时钟系统初始化函数

    Systemlnit时钟系统初始化函数详解 时钟系统知识总结: 1.STM32有5个时钟源 HSI.HSE.LSI.LSE.PLL. HSI是高速内部时钟,RC振荡器,频率为8MHZ,精度不高. HS ...

  10. 【Linux系统编程】vfork() 函数详解

    00. 目录 文章目录 00. 目录 01. vfork函数 02. fork和vfork区别 03. 父子进程地址空间 04. 附录 01. vfork函数 函数分析 #include <sy ...

最新文章

  1. mysql 设置 0、1 用什么数据类型_MySQL索引的基本使用
  2. jfinal怎么连接oracle,如何用Jfinal连接多个数据库
  3. redis的关键路径和lazy-free
  4. Linux macos 常用终端操作
  5. 微软 word转换pdf_如何将行转换为Microsoft Word表中的列
  6. jsp需要多少java基础_Java基础——JSP(一)
  7. centos下cmake安装
  8. Android学习笔记——ProgressBarHandler
  9. 微服务的隔离和熔断机制
  10. 52多项式07——有理系数和整系数多项式、埃森斯坦判别法、整系数多项式的有理根
  11. Python 错误记录(新手)
  12. Front: 电子邮件通讯创业新模式
  13. 谈一下UI框架经常看到Vue的.sync修饰符
  14. java认证考试试卷_java认证考试试题及答案
  15. Navicat Premium 12注册机破解方法
  16. 模板函数与模板参数自动推导
  17. 超级好用的电脑截图翻译软件你值得拥有!
  18. 一键批量替换文本工具
  19. 《AngularJS深度剖析与最佳实践》一1.4 实现第一个页面:注册
  20. 2022年全球与中国烟酰胺单核苷酸(NMN)市场现状及未来发展趋势

热门文章

  1. JAVA上百实例源码网站
  2. Read_books_水煮三国
  3. jdk1.8以上连接Access数据库
  4. 汇编语言王爽实验16
  5. 安全测试SQL注入与XSS攻击
  6. soapUI使用教程----B站 特斯汀学院
  7. java并发编程源码_Java并发编程实战 PDF+源码
  8. 常见的 web server
  9. 怎么用计算机画画图片,电脑的画图工具怎么用
  10. Java拦截器实现拦截controller方法