当前位置: 首页 > news >正文

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; }

实验结果

编译运行结果

http://www.cnnetsun.cn/news/66922.html

相关文章:

  • 云服务器邂逅英伟达B200:AI算力革命的黄金搭档
  • Qwen3-14B在编程与数学推理中的表现评测
  • AutoGPT在非营利组织运营管理中的价值体现
  • MyBatis基础入门《十五》分布式事务实战:Seata + MyBatis 实现跨服务数据一致性
  • 行为学实验室整体解决方案 动物行为学整体解决方案
  • 【前端】从零开始搭建现代前端框架:React 19、Vite、Tailwind CSS、ShadCN UI-第五章《主题(Theme)系统 —— Light / Dark / System》
  • 从零开始部署Qwen3-8B:VSCode安装调试全流程
  • LU,数显式脑立体定位仪 大鼠脑定位仪 小鼠脑定位仪 小动物脑定位仪
  • 2025年geo系统源码开发公司技术方案有那些
  • 一文带你了解使用ARP欺骗的中间人 (MiTM) 攻击,黑客技术零基础入门到精通教程!
  • 【问题排查】No spring.config.import property has been defined
  • Dify连接外部数据库存储PyTorch模型输出结果
  • 基于SVM代理模型的电机多目标优化:平均转矩、转矩脉动及推力径向优化的高精度实现
  • 三分钟上手DNN多输出预测(附保姆级代码)
  • 什么是苹果MFi认证,有什么优势?
  • Conda与Pip双管齐下:优化PyTorch-CUDA依赖安装流程
  • PyTorch 权重剪枝中的阈值计算:深入解读 numel() 和 torch.kthvalue()
  • CKA-Agent:揭示商业LLM安全防线的“特洛伊知识“漏洞
  • 构筑智能心理新基建:北京朗心致远AI心理场室与设备整体解决方案
  • 【众包 + AI智能体】AI境生态巡查平台边防借鉴价值专项调研——以广西边境线治理为例
  • AutoGPT支持GraphQL订阅模式了吗?实时更新测试
  • Miniconda集成virtualenv,双剑合璧管理复杂AI项目
  • 从 “PPT 加班狗” 到 “10 分钟出稿大师”:paperzz AI PPT 生成器,藏在学术工具里的效率黑科技
  • 「学术协作者图谱」:PaperZZ领衔的9款AI毕业论文辅助工具全景测评——以“认知脚手架”为轴心的功能解构与伦理适配指南
  • 从 “熬夜改 PPT” 到 “10 分钟出稿”:paperzz AI PPT 生成器如何重构职场 / 学业演示效率?
  • 从 “文献堆里找线索” 到 “1 小时出框架”:paperzz AI 文献综述,把学术苦力活变成 “逻辑拼图游戏”
  • transformer模型详解:以Qwen3-32B为例剖析架构设计
  • 清华源加速下载Qwen3-8B模型文件及依赖组件
  • 如何在单张GPU上部署Qwen3-VL-8B实现高效图像识别
  • AutomationOperation2.60自动操作工具:可视化 GUI支持鼠标 键盘 识别等自动化操软件作