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

Linux:IO接口

目录

    • 系统调用接口
    • 文件描述符
    • 一、open
    • 二、write
    • 三、read
    • 四、lseek
    • 五、close

 之前介绍了IO库函数,本文主要介绍系统提供的IO接口,与IO库函数搭配食用效果更佳。

系统调用接口

 常使用的IO系统调用接口如下:

接口作用
open打开指定的文件
write向指定的文件写入数据
read从指定的文件读取数据
lseek跳转指定文件的读写位置
close关闭指定文件

文件描述符

 系统调用IO接口的操作离不开文件描述符,那么什么是文件描述符?

  在IO库函数中,操作一个文件使用的是文件流指针,可以说文件流指针就是文件的操作句柄。操作句柄就是用来操作东西的手柄,就像操控电视的遥控器一样。

  IO库函数其实就是对IO接口的封装,将IO接口中的文件描述符封装后就变成了文件流指针,因此文件描述符就是IO接口中文件的操作句柄。

一、open

int open(const char *pathname, int flags, mode_t mode)

 作用:用指定方式打开指定文件

  • const char *pathname:要打开的文件名(带路径)
  • int flags:文件的打开方式
  • mode_t mode:文件不存在时创建文件所使用的权限(这里要注意文件掩码的问题)

 返回值:成功返回一个非负整数(就是文件描述符),失败返回-1。

flags选项(前三种必须选择一个):

  • O_RDONLY:只读
  • O_WRONLY:只写
  • O_RDWR:可读可写
  • O_CREAT:文件不存在就创建
  • O_APPEND:写入数据时以追加方式写
  • O_TRUNC:打开文件时清空

二、write

ssize_t write(int fd, const void *buf, size_t count)

 作用:向指定文件写入指定大小的数据。

  • int fd:要向哪个文件写入数据,就传入哪个文件的文件描述符
  • const void *buf:要向文件写入的数据的首地址
  • size_t count:要写入的数据的字节长度

 返回值:成功返回实际写入文件的数据长度,失败返回-1

三、read

ssize_t read(int fd, void *buf, size_t count)

 作用:从指定文件读取指定大小的数据。

  • int fd:要从哪个文件读出数据,就传入哪个文件的文件描述符
  • void *buf:存储读取到的数据的空间首地址
  • size_t count:要读取的数据长度,以字节为单位

 返回值:成功返回实际读取到的数据的长度,出错返回-1

四、lseek

off_t lseek(int fd, off_t offset, int whence)

 作用:跳转读写位置

  • int fd:文件的操作句柄
  • off_t offset:偏移量
  • int whence:从哪里开始偏移

 返回值:成功返回当前跳转后的位置相对于起始位置的偏移量,出错返回-1

whence选项:

  • SEEK_SET:起始位置
  • SEEK_CUR:当前读写位置
  • SEEK_END:末尾位置

五、close

int close(int fd)

 作用:关闭文件

  • int fd:要关闭的文件的文件描述符
http://www.lryc.cn/news/36849.html

相关文章:

  • cron表达式?
  • 日常任务开发系统
  • SQLMap安装教程
  • 【每日一题】蓝桥杯Day06
  • 实体店创业项目 - 开个网咖需要投入多少钱?主要有哪些费用?
  • Linux基础命令-ss显示socket信息
  • 用一个例子告诉你 怎样在spark中创建累加器
  • ICG-Avidin,吲哚菁绿标记的亲和素,应用:生物成像、生物检测、免疫组织化学、微阵列检测制备纳米胶束或微球或其他纳米粒子装载ICG实现成像。
  • Promise的理解和使用
  • TCP
  • Python每日一练(20230310)
  • LeetCode-1590. 使数组和能被 P 整除【前缀和,哈希表】
  • Java核心类库
  • 1110道Java面试题及答案(最新Java初级面试题大汇总)
  • DML 添加、修改、删除数据
  • 千川投放50问(完)!如何跑出高投产?
  • 每日学术速递3.10
  • [C/C++]_[初级]_[声明和使用字符串常量和字节常量]
  • 解Bug之路-Nginx 502 Bad Gateway
  • 目标检测 pytorch复现R-CNN目标检测项目
  • 荧光染料IR-825 NHS,IR825 NHS ester,IR825 SE,IR-825 活性酯
  • 利用Postman的简单运用解决小问题的过程
  • 【C语言】8道经典指针笔试题(深度解剖)
  • 操作系统内核与安全分析课程笔记【2】进程管理与调度
  • 看完书上的栈不过瘾,为什么不动手试试呢?
  • AbstractQueuedSynchronizer从入门到踹门
  • 【项目实战】手把手教你Dubbo微服务架构中整合熔断限流组件Sentinel
  • 图像主题颜色提取(Median cut)
  • Python 分支结构
  • 【C++知识点】文件操作