调用open和openat函数可以打开或创建一个文件

#include <fcntl.h>

int open(const char *path, int oflag, .../*mode_t mode*/);

int openat(int fd, const char *path, int oflag, .../*mode_t mode*/);

返回值:成功,返回文件描述符;出错,返回-1

参数:

  path:要打开或创建的文件名

  oflag:用来说明此函数的多个选项。用下列一个或多个常量进行“或”运算构成

    O_RDONLY    只读打开

    O_WRONLY      只写打开

    O_RDWR     读,写打开

    O_EXEC       只执行打开

    O_SEARHC    只搜索打开(用于目录)

    O_APPEND    每次写时追加到文件的尾端

    O_CLOEXEC      

    O_CREAT       如果该文件不存在则创建它。

    O_DIRECTOR

    O_EXCL      当指定了O_CREAT|O_EXCL时,如果文件已经存在,则出错

    O_NOCTTY

    O_NOFOLLW

    O_NONBLOCK

    O_SYNC

    O_TRUNC     如果该文件已经存在,而且为只写或读、写成功打开,则将其长度截断为0。(相当于覆盖原有内容,重新写入)

    O_TTY_INIT

    O_DSYNC

    O_RSYNC

  fd:fd参数把open和openat函数区分开来

      (1)path参数指定为绝对路径名时,fd会被忽略,openat函数就相当于open函数

    (2)path参数指定为相对路径名时,fd参数指出了相对路径名在文件系统的开始地址。fd参数是通过打开相对路径名所在的目录来获取。(如果有点迷糊,请看下一条)

    (3)path参数指定了相对路径名,fd参数具有特殊值AT_FDCWD。在这种情况下,路径名在当前工作目录中获取,openat函数在操作上与open函数类似。

注:

  ①有open和openat函数返回的文件描述符一定是最小的,未使用的描述符值。

  ②只有在创建新的文件时才会使用最后一个参数。

例子:

转载于:https://www.cnblogs.com/dog-pi/p/10924085.html

open and openat相关推荐

  1. 文件描述符、函数open和openat

    文件描述符 pcb:结构体 一个进程有一个文件描述符:1024 文件描述符:寻找磁盘文件 函数open和openat 函数原型: include<sys/stst.h> #include& ...

  2. open、openat和close函数

    调用open或openat函数可以打开或创建一个文件. #include<fnctl.h> int open(const char *path, int oflag,.../* mode_ ...

  3. 内核系统调用openat Hook(Android10)

    以下操作基于安卓10系统lineageOs 17.1源码研究,手机型号oneplus3 镜像研究测试. 一.安卓内核模块开发编译 安卓系统如何开发内核可加载模块参考以下文章:  "安卓10源 ...

  4. 安卓10源码开发定制(23)内核系统调用openat Hook研究测试

    文章首发微信公众号:QDROID88888,欢迎关注交流 以下操作基于安卓10系统lineageOs 17.1源码研究,手机型号oneplus3 镜像研究测试. 一.安卓内核模块开发编译 安卓系统如何 ...

  5. eBCC性能分析最佳实践(1) - 线上lstat, vfs_fstatat 开销高情景分析...

    Guide: eBCC性能分析最佳实践(0) - 开启性能分析新篇章 eBCC性能分析最佳实践(1) - 线上lstat, vfs_fstatat 开销高情景分析 eBCC性能分析最佳实践(2) - ...

  6. golang socket读写同时_epoll在Golang的应用

    使用Golang可以轻松地为每一个TCP连接创建一个协程去服务而不用担心性能问题,这是因为Go内部使用goroutine结合IO多路复用实现了一个"异步"的IO模型,这使得开发者不 ...

  7. 条件变量 pthread_cond_wait

    1.先了解一下等待队列.(默认大家了解mutex,如果不了解:https://blog.csdn.net/qq_33890670/article/details/79967231) 等待队列,是指li ...

  8. xcode 中无法进行虚拟机调试_在软件部署中使用 strace 进行调试

    我最喜欢的用来解决"为什么这个软件无法在这台机器上运行?"这类问题的工具就是 strace. -- Simon Arneaud(作者) 我的大部分工作都涉及到部署软件系统,这意味着 ...

  9. APUE(第三章)文件IO

    引言 本章主要讲文件IO包括:open.read.write.lseek以及close.这些函数通常被称为不带缓冲的IO,不带缓冲至每个read与write都有内核中的一个系统调用.这些不是ISO C ...

  10. 为什么 Linux 系统调用会消耗较多资源

    本文转载自:公众号真没什么逻辑,作者Draveness,特此感谢! 系统调用是计算机程序在执行的过程中向操作系统内核申请服务的方法,这可能包含硬件相关的服务.新进程的创建和执行以及进程调度,对操作系统 ...

最新文章

  1. 《C++ primer》--第三章
  2. jQuery操作input改变value属性值
  3. 安装VS2008新挫折
  4. 双编码器的自然语言图像搜索
  5. Spring+EhCache缓存实例(详细讲解+源码下载)
  6. 22岁少年破解史上最严重网络攻击,拯救全球互联网,三个月后却被FBI逮捕
  7. 判断选择语句switch...case
  8. LeetCode 565. 数组嵌套
  9. c语言中的标准数据类型,C语言中的基本数据类型
  10. 曝光!衡中教室高清摄像头记录:不想一辈子吃苦,就必须闻鸡起舞!(转给学生)...
  11. 【报告分享】2020物业行业专题报告-德勤.pdf(附下载链接)
  12. MySQL(8)-----truncate清空表和字段自增
  13. 塞规公差带图_工作量规公差带.ppt
  14. mac 壁纸 android,Mac系统风格桌面
  15. matlab图像身高测量,基于Kinect景深图像的快速身高和体重测量方法
  16. 姓潘取名:潘姓有气质的女孩名字
  17. 八数码(有一个空的移动拼图模型+map.count的用法)
  18. 兔八哥与猎人【普及-】
  19. 「光驱」先锋 DVR-111XL 刻录
  20. A_A03_005 STM32程序J-LINK下载

热门文章

  1. Windows软件防火墙实现技术简述
  2. java的ArrayList分析
  3. Spring Boot入门篇-默认安全配置
  4. vue项目中axios请求网络接口封装
  5. 软件技术方案模板_携手跨越,法本信息数字化解决方案赋能企业,共建数字未来...
  6. 无法安装Visual Studio 2010 Service Pack 1
  7. android 终端 核心,android模块/核心板用于手持终端应用,选几米物联。
  8. Mysql 查询某个字段最长的记录
  9. 基于Java的webapp_第一个 JAVA WEB 应用
  10. VC如何打开代码对应的界面编辑窗口