news 2026/9/25 5:06:20

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/9/25 8:51:23

Seed-Coder-8B-Base支持多语言开发:Java、C#、Rust全面覆盖

Seed-Coder-8B-Base&#xff1a;多语言智能编码的轻量级基石 在现代软件开发日益复杂的背景下&#xff0c;一个熟悉的场景反复上演&#xff1a;开发者面对庞大的代码库和繁杂的API文档&#xff0c;迟迟无法下手&#xff1b;新人加入项目后&#xff0c;光是搞懂内部SDK的调用方式…

作者头像 李华
网站建设 2026/9/24 7:24:31

学校培训系统与企业培训软件是什么?主要有何区别?

学校培训系统与企业培训软件在功能和目标上各具特色&#xff0c;分别适应不同的受众需求。学校培训系统主要聚焦于教育机构&#xff0c;通过结构化的课程管理和学员评估&#xff0c;提升教学质量与效率。而企业培训软件则专注于员工职业发展&#xff0c;提供个性化学习路径和实…

作者头像 李华
网站建设 2026/9/24 7:24:22

Ollama模型量化技术对PyTorch-GPU内存占用的影响

Ollama模型量化技术对PyTorch-GPU内存占用的影响 在一台搭载RTX 3060&#xff08;12GB显存&#xff09;的普通工作站上&#xff0c;运行一个70亿参数的大语言模型听起来像是天方夜谭&#xff1f;但如今&#xff0c;这已成为现实。关键就在于——模型量化与高效的GPU运行环境协同…

作者头像 李华
网站建设 2026/9/24 7:24:13

细胞与基因治疗(CGT)核心干货科普

细胞与基因治疗&#xff08;CGT&#xff09; 细胞与基因治疗&#xff08;CGT&#xff09;是生物医药领域针对癌症、遗传病等难治性疾病的前沿技术&#xff0c;和传统药物 “对症缓解” 的逻辑不同&#xff0c;它从细胞和基因层面实现根源性干预。 一、CGT 的基础定义与技术分…

作者头像 李华
网站建设 2026/9/24 7:24:05

Pytorch安装踩坑总结:适配Qwen3-VL-8B的CUDA版本选择

PyTorch安装踩坑总结&#xff1a;适配Qwen3-VL-8B的CUDA版本选择 在部署多模态模型时&#xff0c;一个看似简单却频频绊倒开发者的问题浮出水面——PyTorch 与 CUDA 的版本兼容性。尤其是当你准备运行像 Qwen3-VL-8B 这类轻量级但功能强大的视觉-语言模型时&#xff0c;哪怕只…

作者头像 李华
网站建设 2026/9/25 9:42:48

面试官说了,不懂Python装饰器的人直接Pass

01 装饰器 Python的装饰器是面试常被问到的问题之一&#xff0c;如果你的简历里描述会Python&#xff0c;那么大概率会被问到那么我们应该怎么回答这个问题呢&#xff1f;这里我从几个角度来解释装饰器的作用&#xff0c;大家可以挑选符合自己的说法 1.python装饰器原理基础 …

作者头像 李华