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

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

(0)

相关推荐

  • 编程语言C语言 fopen 函数 - C语言零基础入门教程

    目录 一.fopen 函数简介 二.fopen 函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.fopen 函数简介 C 语 ...

  • 【精品博文】Itop4412学习笔记(2)

    今天学习的是文件IO的操作,需要记录的点: 1.库函数头文件 在所有Linux系统中,对文件的操作都只需包含下面四个头文件即可: #include <unistd.h>     #incl ...

  • <<轻松学会C语言>>20.系统调用(文件接口)

    文件接口,就是对文件进行创建,读后写的操作. 系统已经定义了如下接口: #include <stdio.h> 一:文件接口 要打开或创建文件之前,需要先定义一个文件指针,格式如下: FIL ...

  • Linux(C/C++)下的文件操作open、fopen与freopen

    open是linux下的底层系统调用函数,fopen与freopen c/c++下的标准I/O库函数,带输入/输出缓冲. linxu下的fopen是open的封装函数,fopen最终还是要调用底层的系 ...

  • pytorch函数中的dilation参数的作用

    举例子说明: 1.dilation=1的话(默认情况),效果如图: 2.dilation=2,那么效果如图: 输入是蓝色,绿色是输出,可以看到dilation=1时输入间隔着一个格子.

  • 深入理解C语言main函数的参数

    文/Edward  1  命令就是程序 我想绝大多数看这篇文章的读者基本上都用过Windows操作系统下的命令提示符.比起图形化界面的操作,如果熟悉了Windows的命令提示符,你将会更快地操作这个操 ...

  • 10万行30列数据乘上系数,能快一些吗?含“函数作为参数”的触类旁通方法

    - 问题:简单操作法卡出翔 - 小勤:前面讲到一个多列数据乘上一个系数的问题,<将多列的数据都乘上一个系数,Power Query里怎么操作比较简单?>,里面采用了逆透视成一列数据然后再透 ...

  • PID控制中P、I、D参数的作用

    PID控制中有P.I.D三个参数,只有明白这三个参数的含义和作用才能完成控制器PID参数整定,让控制器到达最佳控制效果.昌晖仪表在本文给大家介绍PID控制中P.I.D参数的作用. 比例作用 比例控制器 ...

  • 思维训练4.函数带参数如何确定零点存在,以一道导数题为例

    经常看到一类题型,即在判断函数零点个数中或者根据函数零点个数求参数取值范围的题目中,如果函数含有参数a,且不知道参数a的具体范围,假设f(x)存在唯一的极小值点x0,那么根据单调性,函数的图像趋势可能 ...

  • 关于指数对数混合函数求参数范围问题的一些心得

    上次说到了没有参数的指数对数混合型函数证明恒成立的问题,这次研究一下有参数的指数对数混合型函数求参数范围的题目的做法. 关于参数范围类问题,本人习惯分离参数,因为分离参数后会避免对参数进行讨论,但是指 ...

  • PID控制中P、I、D参数的作用是什么?(附顺口溜)

    PID控制中有P.I.D三个参数,只有明白这三个参数的含义和作用才能完成控制器PID参数整定,让控制器到达最佳控制效果.能熟练进行PID参数整定,将自动控制系统投自动,这代表着工程技术人员的自动化技能 ...

  • 第13天:Python 函数的参数

    定义一个函数非常简单,但是怎么定义一个函数,需要什么参数,怎么去调用却是我们需要去思考的问题. 如同大多数语言一样(如 Java),Python 也提供了多种参数的设定(如:默认值参数.关键字参数.形 ...

  • python:函数传参是否会改变函数外参数的值

    参考链接: https://blog.csdn.net/u012614287/article/details/57149290 https://blog.csdn.net/qq915697213/ar ...