news 2026/5/7 0:26:49

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/5/4 7:12:49

LobeChat现代化架构详解:基于Next.js的高性能聊天应用框架

LobeChat现代化架构详解&#xff1a;基于Next.js的高性能聊天应用框架 在AI助手迅速渗透日常生活的今天&#xff0c;用户早已不满足于“能对话”的机器人——他们期待的是反应迅速、功能丰富、安全可控且体验流畅的智能交互系统。然而&#xff0c;尽管大语言模型&#xff08;LL…

作者头像 李华
网站建设 2026/5/3 12:46:43

这个Pytest函数,轻松实现动态参数化√

无论什么自动化&#xff0c;部分测试用例均会运用到参数化&#xff0c;参数化可以帮助我们覆盖更多的测试用例&#xff0c;减少重复代码逻辑&#xff0c;然而自动化中也有多种实现参数化的方法&#xff0c;比如UnitTest的DDT模式&#xff0c;Pytest的fixture&#xff0c;以及Py…

作者头像 李华
网站建设 2026/5/1 3:56:31

竞赛毕业设计作品定做---【芳心科技】F. STM32 智驱便携电脉冲针刺仪

实物效果图&#xff1a;实现功能&#xff1a;1. 采用 STM32 单片机作为控制核心。 2. 采用 MOSFET 开关管控制电极片的频率。 3. 通过电开关改变电极片的振幅。 4. 通过三极管改变电极片的电流。 5. 采用 LCD 显示屏进行显示。 6. 按键设置频率、振幅和电流数值。原理图&#x…

作者头像 李华
网站建设 2026/5/6 23:23:23

【Java毕设源码分享】基于springboot+vue的疫情防控自动售货机系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/2 19:42:34

梁文锋的“左右互搏”:宕机的DeepSeek与闷声发财的幻方

深夜23点&#xff0c;北京国贸写字楼的灯光只剩零星几点。程序员小林盯着屏幕上刺眼的“服务器繁忙”提示&#xff0c;第三次尝试调用DeepSeek API失败。就在他为瘫痪的程序焦头烂额时&#xff0c;千里之外的杭州&#xff0c;幻方量化的交易系统正自动完成一笔高频交易&#xf…

作者头像 李华