news 2026/3/26 13:07:26

Linux系统编程(文件io)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/22 5:29:00

Linux系统编程(进程1)

1.进程进程是一个程序执行的过程&#xff0c;会去分配内存资源&#xff0c;cpu的资源。 PCB是一个结构体&#xff0c;process control block。系统用于描述正在运行的进程的相关(所有)信息。pcb 中的内容 &#xff0c;列出了一部分 PID,进程标识符 当前工作路径 chdir umask 00…

作者头像 李华
网站建设 2026/3/26 6:27:57

如何实现零宕机流量调度?,基于Docker MCP 网关的智能负载方案

第一章&#xff1a;零宕机流量调度的核心挑战在现代分布式系统架构中&#xff0c;实现零宕机流量调度是保障服务高可用性的关键环节。系统在升级、扩容或故障转移过程中必须确保用户请求持续被正确处理&#xff0c;任何中断都可能导致业务损失和用户体验下降。为此&#xff0c;…

作者头像 李华
网站建设 2026/3/23 17:53:59

紧急修复农业预测模型漏洞:R语言变量选择三大陷阱你避开了吗?

第一章&#xff1a;农业产量预测中R语言变量选择的核心挑战在农业产量预测建模过程中&#xff0c;变量选择是决定模型性能的关键环节。R语言因其强大的统计分析能力和丰富的扩展包&#xff08;如caret、glmnet、randomForest&#xff09;被广泛应用于该领域&#xff0c;但在实际…

作者头像 李华
网站建设 2026/3/24 5:47:00

为什么你的字幕搜索总延迟?,Dify缓存过期策略的3大误配置

第一章&#xff1a;视频字幕检索的 Dify 缓存周期在基于 Dify 构建的智能视频处理系统中&#xff0c;字幕检索功能依赖于高效的缓存机制以提升响应速度和降低重复计算开销。缓存周期的设计直接影响系统的实时性与资源利用率。缓存策略的核心参数 Dify 平台通过配置缓存生存时间…

作者头像 李华
网站建设 2026/3/25 11:41:54

适配体:食品安全检测中的“分子侦察兵”,如何精准揪出隐形威胁?

当我们谈论食品安全时&#xff0c;有一个看不见的战场正备受关注——真菌毒素污染。这些由霉菌产生的有害物质&#xff0c;可能悄悄存在于谷物、坚果等日常食品中。传统检测方法虽精准&#xff0c;但过程繁琐、成本高&#xff0c;难以实现快速筛查。今天&#xff0c;我们要认识…

作者头像 李华