news 2026/4/16 8:04:32

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/4/16 12:15:09

Docker启动顺序混乱导致Agent崩溃?一文掌握多模态系统正确启动流程

第一章&#xff1a;Docker启动顺序混乱导致Agent崩溃&#xff1f;一文掌握多模态系统正确启动流程在构建基于Docker的多模态系统时&#xff0c;组件间依赖关系复杂&#xff0c;若容器启动顺序不当&#xff0c;极易引发核心服务如Agent进程因依赖未就绪而崩溃。例如&#xff0c;…

作者头像 李华
网站建设 2026/4/16 10:19:15

现代webpack/react/typescript/pnpm项目模板,从零到一搭建webpack项目

项目模板 模板地址 如果急用&#xff0c;直接使用当前模板即可。点击右上角Use This Template即可创建一个新的项目。 背景 当我每每创建一个新的webpack项目时&#xff0c;总是需要经过繁琐的webpack配置来完成项目的init。如果从网络上搜寻快速的setup总会遇到各种各样的问…

作者头像 李华
网站建设 2026/4/16 10:17:53

为什么你的空间转录组数据无法聚类?,R语言降维关键参数深度剖析

第一章&#xff1a;为什么你的空间转录组数据无法聚类&#xff1f; 空间转录组技术能够同时捕获基因表达与组织空间位置信息&#xff0c;但在实际分析中&#xff0c;许多研究者发现数据难以有效聚类。这一问题通常源于数据预处理不当、空间噪声干扰或算法选择不合理。 数据质量…

作者头像 李华
网站建设 2026/4/16 10:20:23

深入浅出 Ascend C:昇腾 AI 芯片的原生编程语言详解

引言&#xff1a;为什么需要 Ascend C&#xff1f;随着人工智能技术的飞速发展&#xff0c;AI 芯片成为推动算力革命的关键引擎。华为昇腾&#xff08;Ascend&#xff09;系列 AI 处理器凭借其高能效比、强大的矩阵计算能力和软硬协同架构&#xff0c;在大模型训练与推理、边缘…

作者头像 李华
网站建设 2026/4/16 8:27:33

私有化Dify日志分析全指南(从采集到可视化,一站式解决方案)

第一章&#xff1a;私有化 Dify 日志分析概述在企业级 AI 应用部署中&#xff0c;Dify 作为一个支持可视化编排与模型管理的低代码平台&#xff0c;其私有化部署版本被广泛应用于数据安全要求较高的场景。日志系统作为可观测性的核心组成部分&#xff0c;承担着监控运行状态、排…

作者头像 李华