马鞍山钢铁建设集团有限公司网站广东省建设厅官网证件查询

张小明 2026/1/9 20:53:22
马鞍山钢铁建设集团有限公司网站,广东省建设厅官网证件查询,小程序有什么用,什么是网站开发设计与实现第一部分#xff1a;重定向的本质 1. 核心规则#xff1a;最小分配原则Linux 在 open 一个文件时#xff0c;有一个铁律#xff1a;给新文件分配的 fd#xff0c;永远是当前 files_struct 数组中 最小的、未被占用的 下标。2. 手动实现重定向 ( The Hack Way …第一部分重定向的本质1. 核心规则最小分配原则Linux 在open一个文件时有一个铁律给新文件分配的 fd永远是当前files_struct数组中 最小的、未被占用的 下标。2. 手动实现重定向 ( The Hack Way )利用这个规则我们可以玩一个魔术我们知道printf默认是往stdout(也就是fd 1) 打印数据。如果我们先close(1)把 1 号下标空出来。然后立刻open(log.txt, ...)。根据“最小分配原则”系统会把1 号下标分配给log.txt。此时printf依然傻傻地往 fd 1 写数据但 fd 1 已经不再指向显示器而是指向了log.txt。代码验证#include stdio.h #include unistd.h #include fcntl.h int main() { // 1. 关闭标准输出 (显示器) close(1); // 2. 打开新文件 // 系统发现 1 号坑是空的于是把 fd 1 给到了 log.txt int fd open(log.txt, O_WRONLY | O_CREAT | O_TRUNC, 0666); // 3. 正常打印 // printf 底层是 write(1, ...)它不知道 1 号变了 printf(fd: %d\n, fd); printf(hello redirection\n); // 4. 刷新缓冲区 (重要如果是文件默认是全缓冲不刷新可能写不进去) fflush(stdout); close(fd); return 0; }现象屏幕上什么都没有但cat log.txt会发现内容都在里面。这就是的雏形。第二部分dup2系统调用手动close再open这种方法有风险比如多线程环境下可能有竞争或者代码写起来麻烦。Linux 提供了一个专门的系统调用来做这件事dup2。1. 函数原型#include unistd.h int dup2(int oldfd, int newfd);2. 核心逻辑 (面试必问)很多人容易搞混参数顺序。记忆口诀让newfd成为oldfd的副本。动作如果newfd已经被打开了先把它close掉。把内核数组中oldfd指向的那个file结构体指针复制到newfd的下标位置。结果newfd和oldfd现在同时指向同一个文件原来oldfd打开的那个文件。通常我们会让oldfd是刚打开的文件如 fd 3newfd是 1。这样 1 就指向了 3 指向的文件。3. 代码实战#include stdio.h #include unistd.h #include fcntl.h int main() { int fd open(log.txt, O_WRONLY | O_CREAT | O_TRUNC, 0666); if (fd 0) { perror(open); return 1; } // 【核心】把 fd(3) 的内容复制给 1 // 此时 1 号下标也指向了 log.txt dup2(fd, 1); printf(This will go to file!\n); fprintf(stdout, This too!\n); // 现在 1 和 3 都指向 log.txt关闭 3 不影响 1 close(fd); return 0; }第三部分标准输出 (1) vs 标准错误 (2)我们在 Linux 命令中常看到 log.txt 21这是什么意思stdout (1)正常的打印信息。stderr (2)专门用于打印错误信息。区分意义当我们执行./program log.txt时Shell 只把fd 1重定向到了文件。此时fd 2依然指向显示器。好处程序正常跑的日志写文件里程序报错的信息直接打在屏幕上让你看到。如何把错误也写进文件./program log.txt 21先把 1 重定向到文件。再把 2 重定向到 1也就是 2 也指向文件。第四阶段 缓冲区 (Buffer) 的坑1. 现象Fork 导致的“双倍快乐”看下面这段诡异的代码#include stdio.h #include string.h #include unistd.h int main() { // C库函数 const char *s1 hello printf\n; printf(%s, s1); // 系统调用 const char *s2 hello write\n; write(1, s2, strlen(s2)); // 创建子进程 fork(); return 0; }实验直接运行(./test)屏幕上打印两行非常正常。重定向运行(./test log.txt)打开log.txt你会发现hello write出现1 次。hello printf竟然出现了2 次2. 原理揭秘缓冲策略的改变这跟fork无关跟C 语言标准库 (FILE) 的缓冲策略有关。C 库缓冲区策略无缓冲立刻刷新。行缓冲 (Line Buffered)遇到\n才刷新。显示器默认是行缓冲。全缓冲 (Full Buffered)缓冲区填满才刷新。普通文件默认是全缓冲。分析案发现场直接运行时向显示器写printf遇到\n触发行缓冲立马把数据刷给内核write。fork时C 库缓冲区是空的。父子进程各自退出没啥可刷的。write是系统调用直接写内核。重定向时向文件写printf虽然有\n但因为目标变成了普通文件策略变为全缓冲。数据暂存在 C 库的用户级缓冲区里没有刷给内核。退出时写时拷贝子进程复制了父进程的内存包括那个没刷新的 C 库缓冲区Fork 发生父进程创建子进程。write直接写内核不受影响先写进去了。父进程退出刷新自己的缓冲区 - 写入一次 hello printf。子进程退出刷新自己的缓冲区 -又写入一次 hello printf。结论库函数printf,fwrite自带用户级缓冲区操作文件时是全缓冲。系统调用write没有用户级缓冲区。fork会拷贝用户级缓冲区的数据。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

精品手机网站案例网站备案 登录名

在本科教育的征途中,论文创作是每位学子必经的学术试炼场。它不仅考验着学生的知识储备,更锤炼着其逻辑思维与创新能力。然而,面对浩如烟海的文献资料、错综复杂的论文结构以及严格的学术规范,许多学生常常感到力不从心。幸运的是…

张小明 2026/1/8 5:23:41 网站建设

设置一个好的网站导航栏最新建设招聘信息网站

LangFlow与AutoGPT结合的可能性探索 在AI应用开发的前沿战场上,一个日益凸显的矛盾正摆在开发者面前:大语言模型的能力越来越强,但将其落地为可用系统的门槛却依然高得令人望而却步。写提示词、调用链、管理记忆、集成工具——这些本该是“智…

张小明 2026/1/8 4:51:06 网站建设

国外学校网站模板wordpress 教學

智能视频PPT提取工具:3分钟学会自动截图技巧 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 还在为从视频中手动截取PPT画面而烦恼吗?extract-video-ppt 是一…

张小明 2026/1/8 12:23:21 网站建设

文明网站建设培训体会厦门企业网站建设补贴

Excalidraw心理咨询图:情绪与事件关联分析 在一次远程心理咨询服务中,咨询师注意到来访者反复停顿、词不达意:“我就是……说不清楚,脑子里一团乱。” 这种“表达阻滞”在临床实践中极为常见——尤其是面对创伤回忆或复杂情绪交织…

张小明 2026/1/8 10:48:47 网站建设

metro风格网站开发龙岗营销网站建设

搭建高效嵌入式平台:Keil uVision5环境配置与工具链整合实战从一个“下载失败”的坑开始说起你是否经历过这样的场景?刚装好 Keil uVision5,兴冲冲地打开软件,新建项目、选好芯片型号,点击“Download”准备把第一行mai…

张小明 2026/1/8 13:42:14 网站建设

苏州营销网站建设公司公司注册网站模板

第一章:Open-AutoGLM 快递轨迹追踪Open-AutoGLM 是一个基于大语言模型与自动化推理框架的智能物流解决方案,专注于快递轨迹的实时解析与状态预测。该系统能够从非结构化的物流日志中提取关键节点信息,并结合时间序列分析实现高精度的路径还原…

张小明 2026/1/8 2:07:44 网站建设