news 2026/6/15 17:03:21

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/6/15 4:32:23

深入理解 Ascend C:华为昇腾AI芯片的高性能编程语言全解

引言&#xff1a;为什么需要 Ascend C&#xff1f;随着人工智能模型规模的爆炸式增长&#xff0c;对算力的需求已远超传统 CPU 和通用 GPU 的承载能力。为应对这一挑战&#xff0c;专用 AI 加速芯片成为主流方向。华为推出的昇腾&#xff08;Ascend&#xff09;系列 AI 芯片&am…

作者头像 李华
网站建设 2026/6/15 13:31:10

如何在私有化Dify中实现RBAC权限模型?一文讲透用户角色设计精髓

第一章&#xff1a;私有化 Dify 用户管理概述在企业级 AI 应用部署中&#xff0c;私有化 Dify 的用户管理是保障系统安全与权限可控的核心模块。通过本地化部署&#xff0c;企业能够完全掌控用户身份验证、角色分配与访问控制策略&#xff0c;避免敏感数据外泄。用户管理体系支…

作者头像 李华
网站建设 2026/6/15 11:26:33

网络安全转行必拿这 3 个进阶证书,助你从运维 / 开发转型高薪安全岗

网络安全新手入门必考这3张入门级证书&#xff0c;让你轻松踏入网络安安全行业 如果你正准备进入网络安全行业&#xff0c;却还在纠结该考哪张证书作为起点&#xff0c;那么这篇文章会给你清晰的答案。 2025年&#xff0c;网络安全人才缺口依旧巨大&#xff0c;而对新手来说&…

作者头像 李华
网站建设 2026/6/15 12:47:53

逻辑漏洞/业务漏洞比较详细的讲解

1. 简介 逻辑漏洞是指由于程序逻辑不严导致一些逻辑分支处理错误造成的漏洞。 在实际开发中&#xff0c;因为开发者水平不一没有安全意识&#xff0c;而且业务发展迅速内部测试没有及时到位&#xff0c;所以常常会出现类似的漏洞。 2. 安装逻辑 查看能否绕过判定重新安装查…

作者头像 李华