当前位置: 首页 > 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.zskr.cn/news/111157.html

相关文章:

  • 关于C语言面试题整理
  • 【企业数据防护新标准】:私有化Dify异地多活备份实战指南
  • AP-0316语音模组:100dB消回音+AI降噪,攻克全场景音频痛点
  • Arduino Uno R3 开发板 核心技术参数
  • 《深入昇腾底层:Ascend C 编程模型与高性能算子开发实战》
  • 私有化Dify日志分析全指南(从采集到可视化,一站式解决方案)
  • 霍尔电流传感器数据怎么实时查看,有便携方式么?
  • OpenAI API 和 Anthropic API的区别及对比
  • 常说求职有 “金三银四”“金九银十”,到底哪个时间段找工作最合适?
  • 3步完成Dify工作流依赖完整性验证,提升系统稳定性90%
  • CF1093G Multidimensional Queries - crazy-
  • Gin框架入门篇001_Gin框架简介
  • hal!HalpClockInterrupt分析从hal!HalBeginSystemInterrupt到nt!KeUpdateSystemTime到hal!HalEndSystemInterrupt
  • Gin框架入门篇002_第一个Gin服务
  • 【Dify检索优化终极方案】:从结果过滤到重排序的全链路解析
  • 基于模型上下文协议(MCP)的可插拔式临床AI工具链Clinical DS研究(下)
  • 【Dify索引优化终极指南】:构建毫秒级视频帧检索系统的秘密武器
  • Mac电脑往U盘拷贝文件有同名的“._”开头的文件,怎么避免?
  • 私有化Dify端口配置难题破解(资深架构师亲授配置逻辑)
  • 为什么顶级投行都在用R做风险模拟?深度解析蒙特卡洛方法的五大优势
  • 数据筛选助手
  • 【DevSecOps必修课】:基于Docker Scout的5阶段漏洞修复体系构建
  • astmd4169、astm d4169运输包装测试系统有多少测试内容
  • Docker Compose中Agent服务扩展的5种高级模式(架构师私藏方案)
  • 回滚莫队 学习笔记 - -Graphic
  • 揭秘Docker Compose中的Agent健康检测机制:如何避免服务假死?
  • OpenAI聘请谷歌高管Albert Lee担任企业发展副总裁
  • Docker MCP 网关负载均衡调优案例实录(99%工程师忽略的关键参数)
  • 背包DP
  • yolov5实现游戏图像识别与后续辅助功能