上海网站营销泰安房产网站

张小明 2026/1/7 13:30:41
上海网站营销,泰安房产网站,南京做中英文网站设计,房地产公司如何网站建设第一阶段#xff1a;重新认识“文件”在写 C 语言时#xff0c;你肯定用过 fopen, fread, fwrite。但在操作系统眼里#xff0c;文件远不止“读写”这么简单。1. 文件的本质文件 文件内容 文件属性内容#xff1a;你写进去的 Hello World。属性 (元数据)重新认识“文件”在写 C 语言时你肯定用过fopen,fread,fwrite。但在操作系统眼里文件远不止“读写”这么简单。1. 文件的本质文件 文件内容 文件属性内容你写进去的 Hello World。属性 (元数据)文件名、大小、创建时间、拥有者、权限等。结论创建一个 0kb 的空文件它也是占磁盘空间的因为要存它的属性。2. 谁在操作文件代码写在那如果不跑是不会操作文件的。只有当代码运行起来变成进程后才是“进程在操作文件”。所以文件操作的本质是 进程 (Process) 和 操作系统 (OS) 之间的一次对话因为磁盘硬件是归 OS 管的进程不能直接摸。第二阶段库函数 vs 系统调用 (The Battle)C 标准库函数 (Library Functions)fopen,fclose,fwrite,fread...特点跨平台。你在 Windows 上写fopen能跑在 Linux 上也能跑。因为 C 库帮你屏蔽了底层差异。带缓冲这是关键它自带一个用户级缓冲区稍后详解。系统调用接口 (System Calls)open,close,write,read...特点不跨平台。这是 Linux 内核直接提供的接口Windows 的 API 叫CreateFile。无缓冲直接把数据扔给内核甚至直接写盘。层级关系第三阶段核心接口open详解我们要重点学习open因为所有的“黑魔法”如O_APPEND追加、O_CREAT创建都藏在它的参数里。1. 函数原型你需要包含fcntl.h。int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);2. 参数flags(位图标志位)还记得我们在讲waitpid时提到的位图吗这里也是一样的设计。Linux 用一个整数的不同比特位来表示不同的选项。常用的标志必须记住O_RDONLY只读打开。O_WRONLY只写打开。O_RDWR读写打开。(以上三个必须三选一)O_CREAT如果文件不存在就创建它。如果存在直接打开。O_TRUNC截断 (Truncate)。如果文件存在把它清空长度变为 0。O_APPEND追加。写数据时自动加到文件末尾。如何组合 使用 按位或 (|)。比如O_WRONLY | O_CREAT | O_TRUNC 就等同于 C 语言的 fopen(..., w)。3. 参数mode(权限)注意只有当你使用了O_CREAT选项时才必须传第三个参数mode。作用指定新创建文件的初始权限如0666。实际权限记得我们讲 mkfifo 时说的 umask 吗这里同理。$$实际权限 mode \ \ \ (\sim umask)$$4. 返回值文件描述符 (File Descriptor)成功返回一个int(大于等于 0)。我们通常叫它fd。失败返回-1并设置errno。第四阶段代码实战 —— 手写fopen(w)我们来写一段代码直接使用系统调用来实现“向文件写入字符串”。#include stdio.h #include string.h #include unistd.h #include sys/types.h #include sys/stat.h #include fcntl.h int main() { // 场景以写的方式打开如果不存在就创建如果存在就清空 // 这完全等价于 fopen(log.txt, w); // 设置 umask 为 0保证我们要的权限不被过滤 umask(0); // 1. 打开文件 // 返回值 fd 就是那个神秘的整数 int fd open(log.txt, O_WRONLY | O_CREAT | O_TRUNC, 0666); if (fd 0) { perror(open); // 打印错误原因 return 1; } printf(Open success, fd: %d\n, fd); // 2. 写入数据 const char *msg hello system call\n; // write(fd, 缓冲区, 字节数) // 注意这里不需要 1 把 \0 写进去因为文件里不需要字符串结束符那是C语言的规定 int count 5; while(count--) { write(fd, msg, strlen(msg)); } // 3. 关闭文件 close(fd); return 0; }编译运行Bashgcc sys_io.c -o sys_io ./sys_io cat log.txt实验现象你会看到屏幕打印Open success, fd: 3。cat能看到文件内容。关键问题为什么fd是3 0, 1, 2 去哪了第五阶段核心谜题 —— 文件描述符 (File Descriptor)这是基础 IO 中最重要的概念也是面试必考题。1. 0, 1, 2 的秘密Linux 进程启动时默认会打开三个文件0 (Standard Input)标准输入键盘对应 C 语言的stdin。1 (Standard Output)标准输出显示器对应 C 语言的stdout。2 (Standard Error)标准错误显示器对应 C 语言的stderr。因为 0, 1, 2 被占用了所以你新打开的文件自然就分到了3。2. fd 的本质数组下标fd 到底是什么在内核的 task_struct (PCB) 中有一个指针指向 struct files_struct。在这个结构体里有一个指针数组 struct file* fd_array[]。fd 就是这个数组的下标当你调用open时内核创建一个file结构体把它填入数组中最小的空闲位置比如 3然后把下标 3 返回给你。当你调用write(3, ...)时内核通过下标 3 找到对应的file结构体从而找到文件。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

企业网站的制作电商无货源怎么做

3分钟掌握百度网盘文件快速转存:网页工具全攻略 【免费下载链接】baidupan-rapidupload 百度网盘秒传链接转存/生成/转换 网页工具 (全平台可用) 项目地址: https://gitcode.com/gh_mirrors/bai/baidupan-rapidupload 还在为百度网盘下载速度而烦恼&#xff…

张小明 2026/1/3 1:34:13 网站建设

瑞昌网站建设wordpress手机底部菜单

第一章:Open-AutoGLM移动端部署概述Open-AutoGLM 是基于 AutoGLM 架构优化的轻量化大语言模型,专为在移动设备上实现高效推理而设计。该模型通过结构压缩、算子融合与硬件适配等技术,在保持较高自然语言理解能力的同时,显著降低计…

张小明 2026/1/3 13:45:07 网站建设

网站推广策划内容高德地图能在国外用吗

10分钟从零掌握Typst:新手必备的完整配置与实战指南 【免费下载链接】typst A new markup-based typesetting system that is powerful and easy to learn. 项目地址: https://gitcode.com/GitHub_Trending/ty/typst 还在为LaTeX的复杂配置和漫长编译而头疼吗…

张小明 2026/1/4 1:59:25 网站建设

jsp做的简单的图书馆网站2022国际国内重大新闻

2025最新!专科生必看!9款AI论文软件测评,毕业论文轻松过! 2025年专科生论文写作工具测评:为什么你需要这份榜单? 随着人工智能技术的不断进步,AI论文辅助工具已经成为许多学生提升写作效率的重要…

张小明 2026/1/7 13:05:22 网站建设

电子代加工东莞网站建设wordpress 随机头像

PaddlePaddle镜像如何实现模型冷启动用户画像构建? 在推荐系统、个性化营销和精准广告投放等场景中,用户画像是实现智能化服务的核心。然而,新用户注册初期往往面临“冷启动”问题——缺乏浏览、点击或购买等行为数据,导致传统基于…

张小明 2026/1/6 6:08:15 网站建设

做网站的旅行社wordpress 预览pdf

MoviePilot中Mikan站点种子链接获取失败的完整解决方案与实战修复 【免费下载链接】MoviePilot NAS媒体库自动化管理工具 项目地址: https://gitcode.com/gh_mirrors/mo/MoviePilot 你是否在使用MoviePilot管理动漫资源时,发现Mikan站点的订阅任务总是显示&q…

张小明 2026/1/3 23:40:58 网站建设