news 2026/6/15 21:18:00

Linux文件描述符(1)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux文件描述符(1)

文件描述符基础

  • Linux启动每个进程自动打开三个标准IO:
    • 描述符0,stdin_fileon,标准输入
    • 描述符1,stdout_fileon,标准输出
    • 描述符2,stderr_fileon,标准错误
  • 文件描述声明周期
    • 创建:系统调用open(),socket(),pipe(),dup()等。
    • 使用:使用read(),write(),lseek(),ioctl()操作
    • 关闭:使用close()释放资源
  • 文件描述符与文件表与inode关系
    • 多个fd可以指向同一个文件表项
    • 多个文件表项可以指向同一个inode(磁盘元数据:文件大小,权限,数据块指针)

系统调用介绍

open()打开或创建文件,返回最小可以fd
close()关闭fd,释放资源
dup(fd)复制fd,返回最小可用新fd
dup2(oldfd,newfd)将oldfd复制到newfd

c语言代码

#include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> void show_fds(const char* msg) { printf("\n--- %s ---\n", msg); system("ls -l /proc/self/fd/"); } int main() { int fd1, fd2; // 显示初始文件描述符(应包含 0,1,2) show_fds("初始状态"); // 打开一个新文件,获取新的文件描述符 fd1 = open("testfile.txt", O_CREAT | O_RDWR | O_TRUNC, 0644); if (fd1 == -1) { perror("open"); exit(1); } show_fds("打开 testfile.txt 后"); // 使用 dup 复制文件描述符 fd2 = dup(fd1); if (fd2 == -1) { perror("dup"); close(fd1); exit(1); } show_fds("dup(fd1) 后"); // 向两个 fd 写入数据(应写入同一文件) write(fd1, "Hello from fd1\n", 16); write(fd2, "Hello from fd2\n", 16); // 关闭 fd1,fd2 仍应有效 close(fd1); show_fds("关闭 fd1 后"); // 使用 dup2 将 fd2 重定向到 stdout (1) dup2(fd2, STDOUT_FILENO); printf("这条消息会写入 testfile.txt!\n"); // 因为 stdout 已重定向 // 恢复 stdout?这里不恢复,直接关闭 close(fd2); show_fds("全部关闭后"); // 验证文件内容 printf("\n文件 testfile.txt 内容:\n"); system("cat testfile.txt"); // 清理 unlink("testfile.txt"); return 0; }

实验结果

编译运行结果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 23:34:33

【Qt开源项目】— ModbusScope-day 5

第5天&#xff1a;数据处理层深入攻略&#xff08;ExpressionParser与GraphDataHandler&#xff09; 目标&#xff1a;用5-6小时掌握表达式解析、寄存器替换、数学计算的核心流程&#xff0c;理解原始数据如何转化为最终曲线数值。上午&#xff08;3小时&#xff09;&#xff1…

作者头像 李华
网站建设 2026/6/15 9:59:22

小程序会员积分系统功能开发,抽奖,大富翁等,附分员积分系统源码

积分系统小程序搭建大概会分为5个步骤&#xff1a;1. 需求分析、2. 系统设计、3. 开发、4. 测试、5. 部署。就这几个步骤起码需要三个人&#xff1a;产品经理、技术人员、测试人员。 如果是只是要搭建自己企业的积分商城&#xff0c;根本没必要自己搭建&#xff0c;因为最后拆…

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

PyTorch动态图机制如何支撑Qwen3-VL-30B的训练灵活性?

PyTorch动态图如何赋能Qwen3-VL-30B的灵活训练&#xff1f; 在构建下一代AI Agent的征途中&#xff0c;视觉语言模型&#xff08;VLM&#xff09;正扮演着越来越核心的角色。以Qwen3-VL-30B为代表的超大规模多模态模型&#xff0c;凭借其300亿参数量和强大的跨模态理解能力&…

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

接口测试需求分析

测试接口的时候&#xff0c;可能很多人都会想&#xff0c;按着研发给的接口协议文档来测&#xff0c;不就好了吗&#xff1f; 其实&#xff0c;对于接口的测试&#xff0c;还需要有点深度的需求分析&#xff0c;然后再进行对应的测试。对于接口测试&#xff0c;这里有个不太详…

作者头像 李华
网站建设 2026/6/15 9:56:02

Dify智能体平台集成Qwen3-VL-8B实现图文对话机器人

Dify智能体平台集成Qwen3-VL-8B实现图文对话机器人 在电商客服、内容审核和智能助手等实际场景中&#xff0c;用户上传一张图片并提问“这是什么&#xff1f;”“有没有问题&#xff1f;”“怎么改进&#xff1f;”已经成为常态。然而&#xff0c;传统AI系统大多只能处理文本输…

作者头像 李华
网站建设 2026/6/15 15:01:36

ENSP下载官网之外的技术延伸:网络仿真中集成AI决策模型

ENSP之外的智能跃迁&#xff1a;用Qwen3-14B构建自主决策型网络仿真系统 在华为ENSP这类传统网络仿真工具早已被广泛用于教学与运维演练的今天&#xff0c;一个现实问题正日益凸显&#xff1a;即便拓扑搭建得再精准、设备模拟得再逼真&#xff0c;整个系统的“大脑”依然是人。…

作者头像 李华