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

Linux系统编程(文件io)

文件io


系统调用,操作系统为了方便用户使用系统功能而对外提供的一组系统函数。关于文件操作的相关函数叫文件io。
C库函数,c标准库函数,c语言程序能够运行的地址,默认 c库函数都可以调用。 关于文件操作的相关函数叫标准io。

c库(跨平台,更通用)底层调用系统调用函数。 C库相关函数是对系统调用(功能更加强大)函数的封装

标准io 和文件io 关系

共同点:都操作文件。

区别:

访问资源缓存
标准ioFILE* 文件流指针带缓存区(适合操作非设备类文件)
文件ioint 文件描述符(资源的标号)不使用缓存区(适合操作设备类文件)

文件操作的步骤

1.打开 open

int open(const char *pathname, int flags,int mode); 功能: 获得一个文件描述符 参数: pathname:文件名 flags: O_RDONLY | O_WRONLY O_RDWR O_CREAT, 创建文件 O_TRUNC文件内容清空 O_APPEND追加 返回值: 成功返回文件描述符 失败返回-1

man fopen 可以查到这张表

2.读写 read/write

ssize_t read(int fd, void *buf, size_t count); fd, 需要读的文件描述符 buf,需要带内存空间的指针,准备接收从硬盘读上来的内容 count ,本次读文件的内容到buf 的最大长度。建议值,可以文件内容实际大小 大。 返回值, >0 ,表示实际读到的字节数 ==0 ,文件到达结尾 <0 ,表示错误 ssize_t write(int fd, const void *buf, size_t count); fd, 需要写的文件描述符 buf,需要写入文件内容的指针, count ,应该buf中内容的有效数据长度。 返回值, >0 ,表示实际写入的字节数 ==0 ,表示一个字节都没有写入(和特定的设备有关,普通文件不会) <0 ,表示错误

3.关闭 close

目录操作


1.操作步骤

1,打开目标目录 opendir 2.读取目录,, readdir 3.关闭目录 closedir

2.相关函数

DIR *opendir(const char *name); 功能: 打开一个目录获得一个目录流指针 参数: name:目录名 返回值: 成功返回目录流指针 失败返回NULL 2.readdir struct dirent *readdir(DIR *dirp); 功能: 从目录流中读取文件信息并将保存信息的结构体 参数: dirp:目录流指针 返回值: 包含文件信息的结构体 出错或者读到目录流末尾返回NULL 3、关闭目录 int closedir(DIR *dirp); 功能:关闭之前已经打开的目录流对象 参数:opendir的返回结果中目录流对象 返回值:成功 0 失败 -1;

Makefile


命令: make


实现一键编译 ,当执行make命令后,会在当前目录下查找makefile 或Makefile(建议值)。
工程管理工具 ,用于编译多个源文件,源文件可能在不同目录下。可以添加编译选项。
makefile 的编写规则。

目标:依赖 TAB 规则 版本1 a.out:main.c func.c gcc main.c func.c -o a.out 版本2 makefile 内置变量 a.out:main.c func.c gcc $^ -o $@ $^,在本条规则中,表示 所有的依赖 $@,在本条规则中,表示目录 #不需要依赖文件 clean: rm a.out linux@ubuntu:~/20251103/os_app/Make$ make make: 'a.out' is up to date. 说明,产生a.out的相关源文件没有被修改(没有被更新) ,不编译 make clean 清除a.out , 版本3 自定义变量 SRC= main.c SRC+= func.c APP= a.out FLAG = -g $(APP):$(SRC) gcc $^ -o $@ $(FLAG) clean: rm $(APP)
http://www.jsqmd.com/news/100426/

相关文章:

  • Docker使用案例-部署Python-flask应用
  • 删除有序数组的重复项
  • 【企业数据防护新标准】:私有化Dify异地多活备份实战指南
  • 关于C语言面试题整理
  • 【MLOps工程师必看】:用语义化Docker标签实现AI模型可追溯性
  • Arduino Uno R3 开发板 核心技术参数
  • Linux系统编程(进程1)
  • 《深入昇腾底层:Ascend C 编程模型与高性能算子开发实战》
  • 基于协同过滤算法的动漫推荐系统源码 Java+SpringBoot+Vue3
  • 【高阶检索技术揭秘】:Dify算法选择的7个关键考量因素
  • 如何实现零宕机流量调度?,基于Docker MCP 网关的智能负载方案
  • 私有化Dify日志分析全指南(从采集到可视化,一站式解决方案)
  • 为什么你的视频帧检索越来越慢?Dify索引必须掌握的4项优化策略
  • 霍尔电流传感器数据怎么实时查看,有便携方式么?
  • OpenAI API 和 Anthropic API的区别及对比
  • 常说求职有 “金三银四”“金九银十”,到底哪个时间段找工作最合适?
  • Windows操作系统:数字世界的基石与技术演进全景
  • 第8篇 | 流量的“密语”:网络监听与中间人攻击的全景解析
  • 3步完成Dify工作流依赖完整性验证,提升系统稳定性90%
  • 我也不明白
  • 【Docker镜像优化黄金法则】:让边缘Agent更小更快更安全
  • 从零搭建量子计算开发环境:镜像缓存构建的4个核心原则与实操技巧
  • CF1093G Multidimensional Queries - crazy-
  • Gin框架入门篇001_Gin框架简介
  • 仅1%人掌握的建模技术:R语言金融相关性矩阵稀疏化处理实战
  • App从点击流到会话流,不重构的情况下如何实现?3个实战场景解析
  • 超越传统PLM理念,定义行业新标准:全星研发项目管理APQP软件系统
  • hal!HalpClockInterrupt分析从hal!HalBeginSystemInterrupt到nt!KeUpdateSystemTime到hal!HalEndSystemInterrupt
  • 女性网安职场生存指南:从入门小白到安全领域领导力养成记
  • C语言复习笔记