news 2026/4/18 9:21:09

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/4/18 9:13:56

Docker使用案例-部署Python flask

环境准备操作系统-centsos9.0docker 27.3.1基础知识三个核心概念&#xff1a;镜像&#xff1a;一个静态只读的模版&#xff0c;运行起来成为“容器”。比如&#xff1a;ubuntu镜像&#xff0c;ngnix镜像。容器&#xff1a;镜像的运行实例&#xff0c;每个容器是相互隔离&#x…

作者头像 李华
网站建设 2026/4/18 9:18:49

IDEA+mybatis实现学生信息查询系统

查看全文&#xff1a;https://www.longkui.site/program/java/ideamybatis3/7179/ 本文主要实现本文主要实现《Java EE企业级应用开发教程&#xff08;SpringSpringMVCMybatis&#xff09;》第2版中的第3章课后习题&#xff1a;学生信息管理系统。 &#xff08;1&#xff09;多…

作者头像 李华
网站建设 2026/4/16 13:55:33

2025年GEO优化专业评测,杭州爱搜索人工智能位列榜首

GEO&#xff08;地理位置优化&#xff09;作为数字营销领域的重要分支&#xff0c;近年来随着本地化服务需求的激增而迅速发展。然而&#xff0c;市场上GEO优化服务商良莠不齐&#xff0c;技术方案各异&#xff0c;给企业选择带来了不小的挑战。如何在众多服务商中找到真正适合…

作者头像 李华
网站建设 2026/4/10 2:20:54

2025年8款公文AI写作工具深度测评!公文宝、新华妙笔等

今天为大家带来一份超实用的AI公文写作工具深度测评。这次我花了近一个月时间&#xff0c;亲身体验了8款市面上主流的AI写作工具&#xff0c;用同一份工作总结要求测试每款工具的实际表现&#xff0c;看看谁才是体制内工作者的必备神器&#xff01;1. 公文宝说实话&#xff0c;…

作者头像 李华
网站建设 2026/4/16 10:13:04

Seed-Coder-8B-Base vs 其他代码模型:谁更适合你的项目?

Seed-Coder-8B-Base vs 其他代码模型&#xff1a;谁更适合你的项目&#xff1f; 在现代软件开发节奏日益加快的今天&#xff0c;一个能“读懂”你意图、提前写出下一行代码的AI助手&#xff0c;早已不再是科幻设定。从GitHub Copilot到各类IDE智能补全插件&#xff0c;AI编程辅…

作者头像 李华