洛南网站建设成都网站建设今明互联

张小明 2025/12/31 12:53:25
洛南网站建设,成都网站建设今明互联,网站搭建运营,网站建设规划方案.pptLinux系统编程实战#xff1a;深入理解文件IO操作 从实际问题开始#xff1a;为什么需要文件IO#xff1f;实际应用场景 #x1f427; Linux哲学#xff1a;一切皆文件生动理解动手实验#xff1a;亲自体验“一切皆文件” Linux系统架构揭秘商场比喻帮你理解 系统IO…Linux系统编程实战深入理解文件IO操作从实际问题开始为什么需要文件IO实际应用场景 Linux哲学一切皆文件生动理解动手实验亲自体验“一切皆文件”Linux系统架构揭秘商场比喻帮你理解系统IO直接与内核对话1. 打开文件 - open()2. 写入文件 - write()3. 读取文件 - read()4. 移动位置 - lseek()5. 关闭文件 - close()完整示例系统IO实战标准IO更易用的文件操作1. 打开文件 - fopen()2. 写入文件 - fwrite()3. 读取文件 - fread()4. 移动位置 - fseek()5. 关闭文件 - fclose()完整示例标准IO实战系统IO vs 标准IO如何选择缓冲区工作原理 关键数据保护确保写入成功选看缓冲区写入时机强制写入磁盘的方法关键数据保护示例实践总结1. 选择正确的IO方式2. 保护关键数据3. 错误处理4. **资源管理**核心要点回顾从实际问题开始为什么需要文件IO想象一下这样一个场景你正在开发一个智能手表应用用户精心挑选了一个漂亮的表盘样式。当他关机后重启时系统如何“记住”他之前的设置呢这就是文件IO的用武之地文件IOInput/Output就像是计算机的“记忆系统”能够将数据永久保存在存储设备中即使断电重启也不会丢失。实际应用场景用户配置保存主题、音量、亮度等设置游戏进度存档保存关卡进度、角色装备日志记录系统运行日志、错误日志数据持久化用户数据、应用状态 Linux哲学一切皆文件在Linux世界里有一个非常有趣的设计理念“一切皆文件”。这是什么意思呢生动理解Linux把几乎所有硬件设备、进程、网络连接都当作“文件”来处理键盘是文件/dev/tty屏幕是文件/dev/fb0进程信息是文件/proc/[PID]/内存也是文件/dev/mem动手实验亲自体验“一切皆文件”实验1查看运行中的程序#includestdio.hintmain(){printf(Hello, World!\n);while(1);// 让程序一直运行return0;}编译并运行gcc hello.c -o hello ./hello# 符号让程序在后台运行ps# 查看进程ID假设是93899cat/proc/93899/status# 查看进程状态实验2键盘输入也是文件cat/dev/ttyoutput.txt# 现在输入任意内容按回车后查看output.txt文件Linux系统架构揭秘为了更好地理解文件IO我们需要了解Linux的“分层设计”┌─────────────────────────┐ │ 用户空间 │ ← 你的程序在这里运行 ├─────────────────────────┤ │ 系统调用接口 │ ← 程序和内核的桥梁 ├─────────────────────────┤ │ 内核空间 │ ← Linux系统核心 ├─────────────────────────┤ │ 硬件设备 │ ← 真实的硬件 └─────────────────────────┘商场比喻帮你理解用户空间像商场的购物区顾客程序可以自由活动内核空间像商场的监控室管理者内核控制一切系统调用像商场的服务台顾客通过这里请求特殊服务系统IO直接与内核对话系统IO是最底层的文件操作方式直接调用Linux内核提供的功能。官网api手册https://www.man7.org/linux/man-pages/index.html第三方中文api手册https://www.bookstack.cn/read/linuxapi/POSIX-IO1. 打开文件 - open()intfdopen(example.txt,O_RDWR|O_CREAT,0644);06440是八进制标识符644对应文件权限-rw-r–r–open()函数详解头文件 #include fcntl.h int open(const char *pathname, int flags, mode_t mode); 参数说明 pathname需要打开文件的路径名 flags打开文件的标志位 必选其一O_RDONLY只读、O_WRONLY只写、O_RDWR读写 可选组合O_CREAT不存在则创建、O_TRUNC清空、O_APPEND追加 高级选项O_NONBLOCK非阻塞、O_SYNC同步写入 mode仅O_CREAT时有效权限 如0644对应权限-rw-r--r-- 返回值 成功返回 文件描述符 失败返回 -12. 写入文件 - write()charbuffer[]Hello World;ssize_twrittenwrite(fd,buffer,sizeof(buffer));write()函数详解头文件 #include unistd.h ssize_t write(int fd, const void *buf, size_t count); 参数说明 fd文件描述符 表示要写入的文件如 open() 返回的值。 buf指向内存缓冲区的指针 要写入的数据。 count请求写入的字节数。 返回值 成功返回实际写入的字节数。 失败返回 -1 FYI: size_t 定义unsigned long 或 unsigned long long 的类型别名具体取决于平台32/64 位。 ssize_t 定义signed long 或 signed long long 的类型别名与 size_t 对应的有符号版本3. 读取文件 - read()charbuffer[100];ssize_tread_countread(fd,buffer,sizeof(buffer));read()函数详解头文件 #include unistd.h ssize_t read(int fd, void *buf, size_t count); 参数说明 fd文件描述符 表示要读取的文件。 buf指向内存缓冲区的指针 用于存储读取的数据。 count请求读取的最大字节数。 返回值 成功返回实际读取的字节数可能小于 count例如读到文件末尾。 0表示已到达文件末尾EOF。 -1表示出错4. 移动位置 - lseek()lseek(fd,0,SEEK_SET);// 移动到文件开头lseek()函数详解头文件 #include unistd.h off_t lseek(int fd, off_t offset, int whence); 参数说明 fd文件描述符 表示要操作的文件。 offset偏移量字节数 可为正向后移动、负向前移动或 0不移动。 whence 基准位置取值为以下三个宏 SEEK_SET从文件开头计算偏移量。 SEEK_CUR从当前位置计算偏移量。 SEEK_END从文件末尾计算偏移量offset 可为负数表示倒数位置。 返回值 成功返回新的文件偏移量从文件开头算起的字节数。 失败返回 -1。5. 关闭文件 - close()close(fd);// 释放资源函数详解头文件 #include unistd.h int close(int fd); 参数说明 fd:文件描述符 返回值 成功返回 0 失败返回 -1完整示例系统IO实战#includefcntl.h#includeunistd.h#includestdio.h#includestring.hintmain(){intfd;charwrite_buf[]Hello, World!;charread_buf[100];// 1. 打开文件fdopen(test.txt,O_RDWR|O_CREAT|O_TRUNC,0644);if(fd-1){printf(打开文件失败\n);return1;}// 2. 写入数据write(fd,write_buf,strlen(write_buf));// 3. 移动到文件开头lseek(fd,0,SEEK_SET);// 4. 读取数据read(fd,read_buf,sizeof(read_buf));printf(读取内容: %s\n,read_buf);// 5. 关闭文件close(fd);return0;}编译用到的cmake和工程环境搭建可参考上篇文章https://mp.weixin.qq.com/s/UMPgEI2DEUOXaplXYANgQg标准IO更易用的文件操作标准IO是C语言提供的更高级的文件操作函数自带缓冲区使用更简单。1. 打开文件 - fopen()#includestdio.hFILE*filefopen(example.txt,w);函数详解头文件 #include stdio.h FILE *fopen(const char *path, const char *mode); 参数解析 path需要打开的路径名 mode打开文件的权限 返回值 成功返回文件指针 失败返回 NULLmode打开文件的权限模式描述文件不存在时初始位置说明“r”只读模式报错返回 NULL文件开头用于读取已存在的文件。“w”只写模式创建新文件文件开头若文件已存在会清空内容“a”追加写模式创建新文件文件末尾写入内容追加到文件末尾。“r”读写模式报错文件开头可读写不会清空文件。“w”读写模式创建新文件文件开头若文件已存在会清空内容“a”读写模式创建新文件文件末尾读取从开头开始写入追加到末尾。2. 写入文件 - fwrite()chardata[]Hello World;fwrite(data,sizeof(char),strlen(data),file);函数详解头文件 #include stdio.h size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream); 参数解析 ptr需要写入的数据的缓存地址 size写入的数据类型大小 / 数据块大小 nmemb写入数据块的数量 stream需要写入的文件指针 返回值 成功返回写入数据块的个数注意不是字节数 失败 返回 -13. 读取文件 - fread()charbuffer[100];fread(buffer,sizeof(char),sizeof(buffer),file);函数详解头文件 #include stdio.h size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) 参数解析 ptr存放数据的缓存地址ptr size数据类型大小 / 数据块大小size nmemb多少个这样的数据块 nmemb stream需要读取的文件指针stream 返回值 成功读取到的字节块数量注意不是字节数 失败返回 0 或者 -14. 移动位置 - fseek()fseek(file,0,SEEK_SET);// 回到文件开头函数详解头文件 #includestdio.h int fseek(FILE *stream, long offset, int whence); 参数解析 stream文件指针 offset光标偏移量 whence光标位置来源 SEEK_SET 文件头开始 SEEK_CUR 光标的当前位置开始 SEEK_END 从文件末尾开始5. 关闭文件 - fclose()fclose(file);函数详解头文件 #includestdio.h int fclose(FILE *fp); 参数解析 fd文件描述符fd指针 返回值 成功返回 0完整示例标准IO实战#includestdio.h#includestring.hintmain(){FILE*fp;charwrite_buffer[]Hello, World!;charread_buffer[100];// 1. 创建并写入文件fpfopen(example.txt,w);// 2. 写入数据fwrite(write_buffer,sizeof(char),strlen(write_buffer),fp);// 3. 移动到文件开头fseek(fp,0,SEEK_SET);// 4. 读取数据fread(read_buffer,sizeof(char),sizeof(read_buffer),fp);printf(读取内容: %s\n,read_buffer);// 5. 关闭文件fclose(fp);return0;}编译用到的cmake和工程环境搭建可参考上篇文章https://mp.weixin.qq.com/s/UMPgEI2DEUOXaplXYANgQg系统IO vs 标准IO如何选择特性系统IO标准IO缓冲机制无用户缓冲自带用户缓冲区性能大量数据时高效小文件频繁读写高效可移植性依赖系统跨平台性好使用难度较复杂较简单适合场景大文件、实时性要求高跨平台、频繁小文件操作缓冲区工作原理用户程序 → 用户缓冲区 → 内核缓冲区 → 磁盘 标准IO ↑ 系统IO ↑ 系统调度 ↑ 关键数据保护确保写入成功选看文件操作中最重要的问题数据真的保存到磁盘了吗缓冲区写入时机缓冲区满了程序调用fflush程序正常结束文件关闭强制写入磁盘的方法系统IO方式write(fd,data,size);// 数据到内核缓冲区fsync(fd);// 强制写入磁盘标准IO方式fwrite(data,size,count,file);// 数据到用户缓冲区fflush(file);// 强制到内核缓冲区fsync(fileno(file));// 强制到磁盘关键数据保护示例#includestdio.h#includestring.h#includeunistd.hintmain(){constchar*important_data关键配置信息;// 方式1使用系统IO并强制同步intfdopen(config.txt,O_WRONLY|O_CREAT,0644);write(fd,important_data,strlen(important_data));fsync(fd);// 确保数据写入磁盘close(fd);// 方式2使用标准IO并强制同步FILE*filefopen(config2.txt,w);fwrite(important_data,1,strlen(important_data),file);fflush(file);// 刷新到内核缓冲区fsync(fileno(file));// 写入磁盘fclose(file);return0;}实践总结1. 选择正确的IO方式需要跨平台 → 使用标准IO处理大文件 → 使用系统IO频繁小文件操作 → 使用标准IO2. 保护关键数据重要配置使用fsync()确保写入磁盘定期保存中间结果防止程序崩溃使用原子操作避免数据损坏3. 错误处理intfdopen(file.txt,O_RDONLY);if(fd-1){perror(打开文件失败);// 打印详细错误信息return-1;}4.资源管理打开的文件一定要关闭检查所有IO操作的返回值使用完毕后清理临时文件核心要点回顾Linux一切皆文件统一的操作接口简化了编程系统IO vs 标准IO根据需求选择合适工具缓冲区机制理解数据流动的路径数据安全使用同步操作保护重要数据记住文件IO是程序与持久化存储的桥梁掌握它能让你的程序真正“记住”用户的选择和操作
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

外包网站建设公司南通制作网页多少钱

CesiumJS体素渲染终极指南:从入门到实战的完整教程 【免费下载链接】cesium An open-source JavaScript library for world-class 3D globes and maps :earth_americas: 项目地址: https://gitcode.com/GitHub_Trending/ce/cesium CesiumJS体素渲染技术为三维…

张小明 2025/12/31 12:52:52 网站建设

建站论坛系统做的好的农产品网站

Python安装后无法识别命令?Miniconda环境变量修复 在搭建数据科学或AI开发环境时,你是否曾遇到这样的场景:刚装完 Miniconda,信心满满地在终端敲下 python --version,结果却返回一个冷冰冰的错误: bash: py…

张小明 2025/12/31 12:52:21 网站建设

记事本代码做网站做产地证的网站

LFM2-350M-Math:3.5亿参数开启边缘设备数学推理新纪元 【免费下载链接】LFM2-350M-Math 项目地址: https://ai.gitcode.com/hf_mirrors/LiquidAI/LFM2-350M-Math 导语 LiquidAI推出的LFM2-350M-Math微型数学推理模型,以3.5亿参数实现了边缘设备…

张小明 2025/12/31 12:51:16 网站建设

网站建设ssc源码平台场外期权网站开发

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个Python脚本,能够自动解析M3U8视频流。功能包括:1. 输入M3U8链接自动下载索引文件 2. 解析TS分片地址 3. 支持多线程下载 4. 自动合并视频文件 5. 提…

张小明 2025/12/31 12:50:44 网站建设

图表设计 网站全国软件公司排名

摘要:电商平台直播板块凭借流量优势与数字化工具,成为品牌营销的重要阵地,但其业务场景单一、数据孤岛等问题制约了私域流量的深度运营。本文提出以“智能名片链动21模式商城小程序”为核心的技术-模式-载体融合方案,通过社交裂变…

张小明 2025/12/31 12:50:13 网站建设

什么网站有做qq群排名的龙海市城乡建设局网站

在内容创作竞争日益激烈的今天,你是否也曾面临这样的困境:想要了解同类视频的真实表现,却只能通过手动记录零散数据?希望分析平台趋势,却苦于缺乏系统性的数据支持?Bilivideoinfo正是为解决这些痛点而生的专…

张小明 2025/12/31 12:49:05 网站建设