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

9.3 Linux_文件I/O_相关函数

打开与关闭

1、打开文件

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

返回值:成功返回文件描述符,失败返回EOF

pathname:文件路径

flags:标志,其中O_RDONLY、O_WRONLY、O_RDWR三个互斥,其余可用 ' | ' 链接

标志名含义
O_RDONLY只读方式打开
O_WRONLY只写方式打开
O_RDWR可读可写方式打开
O_CREAT文件不存在则创建,此时mode参数有效
O_EXCL与O_CREAT搭配使用,测试文件是否存在,存在返回错误
O_TRUNC若文件存在,则清除文件原有的内容
O_APPEND以尾部插入的方式进行写入

mode:表示文件的权限,是可读可写可执行,以八进制表示。实际权限 = mode & (~umask) 

具体权限参考博文"4.Linux_Shell命令"中的"3、修改文件权限“章节,博文链接如下:

4.Linux_Shell命令-CSDN博客

注意:open函数只能打开设备文件,不能创建设备文件

2、关闭文件

int close(int fd);

返回值:成功返回0,失败返回EOF

fd:要关闭的文件描述符

注意:文件关闭后,fd不再能代表文件

读写与光标

读写文件的使用方式与标准I/O中的fread、fwrite非常相似。

1、读取文件

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

返回值:成功返回实际读取的大小,失败返回EOF,读取到末尾返回0

fd:要进行操作的文件的文件描述符

buf:读取数据缓冲区,用于存放读取的数据

count:想要读取数据的个数,单位:字节

注意:返回值不一定等于count,假如文件只有3个字节,count传入5,那么返回值是3

注意:count值不能超过buf的大小

注意:read不会因为遇到回车就停止读取,只有读完count个字节后才会停止

2、写入文件

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

返回值:成功返回实际写入的大小,失败返回EOF

fd:要进行操作的文件的文件描述符

buf:写入数据缓冲区,用于存放要写入的数据

count:想要写入的数据个数,单位:字节

3、定位文件

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

返回值:成功返回当前文件读写位置,失败返回EOF

offset、whence含义与fseek完全一致,参考博文"9.2 Linux_标准I/O_相关函数"的"2、流定位"章节,博文链接为:9.2 Linux_标准I/O_相关函数-CSDN博客

整体实验

具体代码实现如下:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
int main(){int fd;char read_buf[100] = {0};//1.打开文件if((fd = open("./file",O_RDWR|O_CREAT|O_TRUNC,0777)) == -1){perror("open");return -1;}//2.写入数据if(write(fd,"write\n",strlen("write\n")) == -1){perror("write");return -1;}//3.重置光标lseek(fd,0,SEEK_SET);//4.读取数据read(fd,read_buf,sizeof(read_buf));printf("read:%s",read_buf);//5.关闭文件close(fd);return 0;
}

代码运行结果如下:

http://www.lryc.cn/news/445560.html

相关文章:

  • 点亮一个LED灯
  • 分布式框架 - ZooKeeper
  • 8月份,AI图像生成领域web端产品排行榜及产品是做什么的
  • Sqlite_Datetime列选择三月的行
  • spring里面内置的非常实用的工具
  • 计算机毕业设计 基于Python内蒙古旅游景点数据分析系统 Django+Vue 前后端分离 附源码 讲解 文档
  • centos7 docker部署nacos
  • 短视频矩阵源码/短视频矩阵系统搭建/源码开发知识分享
  • Git使用教程-将idea本地文件配置到gitte上的保姆级别教程
  • 论文 | Reframing Instructional Prompts to GPTk’s Language
  • C++ Qt / VS2019 +opencv + onnxruntime 部署语义分割模型【经验2】
  • 代码随想录算法训练营Day9
  • 2025秋招NLP算法面试真题(二十)-有监督微调基本概念
  • 使用宝塔部署项目在win上
  • [大语言模型-论文精读] Diffusion Model技术-通过时间和空间组合扩散模型生成复杂的3D人物动作
  • vue 引入 esri-loader 并加载地图
  • LobeChat:使用服务端数据库部署 - Docker+NextAuth(github)+腾讯云
  • 长列表加载性能优化
  • Vue ElemetUI table的行实现按住上下键高亮上下移动效果
  • windows C++-指定特定的计划程序策略
  • python脚本程序怎么写更优雅?argparse模块巧妙应用
  • 【React】(推荐项目)使用 React、Socket.io、Nodejs、Redux-Toolkit、MongoDB 构建聊天应用程序 (2024)
  • C++:std::move 和 std::forward
  • PHP探索校园新生态校园帮小程序系统小程序源码
  • 通信工程学习:什么是MANO管理编排
  • 备战软考Day04-计算机网络
  • 可以把台式电脑做成服务器吗
  • JavaScript 输出方式
  • 微服务(一)
  • Uniapp时间戳转时间显示/时间格式