当前位置: 首页 > news >正文

Linux 文件I/O 及其 多个相关函数

1、文件描述符

在这里插入图片描述
每个文件描述符对应一个指针,该指针指向一个结构体,里面存储了 已打开 的文件的描述信息。文件描述符和结构体指针的对应关系是使用哈希映射得到的。

2、函数openopenat

调用openopenat函数可打开或创建一个文件,两函声明义如下:

#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

用来说明此函数的多个选项,用下面一个或多个常量进行 “或” 运算,构成oflag参数。
在这里插入图片描述
在这里插入图片描述

fd

fd参数把openopenat函数区分开,共有三种可能性:

  • path参数指定的是绝对路径名,此时,fd参数被忽略openat相当于open
  • path指定的是相对路径名fd参数指出相对路径名在文件系统中的开始地址fdpath合起来,共同构成一个绝对路径)。fd参数是在 调用openat前,通过打开相对路径名所在的目录来获取的。
  • path参数指定相对路径名,fd参数具有特殊值AT_FDCWD。这时,路径名在当前工作目录中获取,openat函数在操作上与open函数类似。

④ 最后一个参数...

最后一个参数写作...,表示参数的数量及类型是可变的。对于open函数而言,仅当创建新文件时才使用最后这个参数,它用于指定文件的访问权限位。
在这里插入图片描述

3、函数read

read函数用于从打开文件中读取数据

#include<unistd.h>
ssize_t read(int fd, void* buf, size_t nbytes);

返回值说明:

返回读到的字节数,若已到文件尾,返回0,出错返回-1。

参数说明:

fd

要读取的文件描述符

buf

读出数据的缓冲区。是个指针,指向存放读出数据的气势内存空间。

nbytes

读取的字节数

其他说明:

在这里插入图片描述

4、fcntl函数 file control

fcntl函数可以控制一个文件描述符的行为,如:复制,改变属性等:

#include<fcntl.h>
int fcntl(int fd, int cmd, ...)

参数说明:

  • fd:我们想要操作的文件描述符
  • cmd:想要执行的操作,共有11种,如下所示:在这里插入图片描述
  • ...:最后一个参数是个可选项,会随着第二个参数而改变

返回值:

返回值随fcntl函数第二个参数的不同而不同。

详细用法直接去参考《UNIX环境高级编程》3.14小节。

相关文章:

  • python——学校课程预习+复习
  • Linux 进程———详解
  • Linux服务器实例程序———使用定时器列表处理非活动连接
  • 各种最短路问题的常用算法模板
  • Linux高级进程编程———在任意两个进程间传递文件描述符:使用 sendmsg 和 recvmsg 实现
  • Linux 线程———详解
  • Linux 中与字符串相关的函数strpbrk、strcasecmp、strspn(不间断更新)
  • C++ printf族函数
  • 最小生成树的常用算法模板
  • 一个服务器压力测试程序
  • 图论——二分图
  • 面向对象程序设计———组合、委托 与 继承
  • C++设计模式
  • C++ 嵌套类
  • CMake指令解析 set(CMAKE_CXX_FLAGS “$ENV{CXXFLAGS} -rdynamic -O3 -fPIC -ggdb -std=c++11 -Wall -Wno-deprec
  • 时间复杂度分析经典问题——最大子序列和
  • 2017 年终总结 —— 在路上
  • Django 博客开发教程 8 - 博客文章详情页
  • HTTP那些事
  • JavaScript学习总结——原型
  • js ES6 求数组的交集,并集,还有差集
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Markdown 语法简单说明
  • php的插入排序,通过双层for循环
  • Redux 中间件分析
  • underscore源码剖析之整体架构
  • 工程优化暨babel升级小记
  • 记一次用 NodeJs 实现模拟登录的思路
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 来,膜拜下android roadmap,强大的执行力
  • 深度学习中的信息论知识详解
  • 思考 CSS 架构
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 原生js练习题---第五课
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • # 安徽锐锋科技IDMS系统简介
  • #前后端分离# 头条发布系统
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (13)Hive调优——动态分区导致的小文件问题
  • (2)MFC+openGL单文档框架glFrame
  • (26)4.7 字符函数和字符串函数
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (poj1.3.2)1791(构造法模拟)
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (接口封装)
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)LINQ之路
  • (转)创业的注意事项