0

0

【Linux】重定向操作的原理:修改文件描述符fd底层指向 (文件系统角度理解)

看不見的法師

看不見的法師

发布时间:2025-07-22 12:08:11

|

658人浏览过

|

来源于php中文网

原创

※.重定向的原理总结:修改特性文件fd的下标内容。上层fd保持不变(例如read,fgets,scanf),而底层fd指向的内容发生改变。

一.文件描述符基础知识 Linux进程默认情况下会有三个已打开的文件描述符,分别是:

  • stdin标准输入,文件描述符为0
  • stdout标准输出,文件描述符为1
  • stderr标准错误,文件描述符为2

0,1,2对应的物理设备通常是:键盘,显示器,显示器。

【Linux】重定向操作的原理:修改文件描述符fd底层指向 (文件系统角度理解)

二.dup2函数介绍 首先了解dup2函数,其功能是改变底层fd的指向。

#include 
int dup2(int oldfd, int newfd);
参数:
- oldfd:这是你想要复制的文件描述符。(最终被保留的fd)
- newfd:这是你想要将oldfd复制到的文件描述符位置。
返回值:
- 成功时,返回newfd(即复制后的文件描述符,通常与newfd参数相同,除非newfd之前已经打开并被关闭)。
- 失败时,返回-1,并设置errno以指示错误类型。

三.重定向原理演示 1.输出重定向——原理图文演示 此时,我们发现,本来应该输出到显示器上的内容,输出到了文件myfile中,其中,fd=1。这种现象称为输出重定向。printf是C库中的IO函数,通常向stdout标准输出1中输出,但是stdout底层访问文件时,仍然查找fd:1,但此时,fd:1下标所表示的内容已经变成了myfile的地址,不再是显示器文件的地址,因此,输出的任何消息都会写入文件中,从而完成输出重定向。

【Linux】重定向操作的原理:修改文件描述符fd底层指向 (文件系统角度理解)

底层等效于dup2(dp, 1); 底层fd指向的内容改变,实现的重定向功能改变,fd为4为oldfd,最终被保留下来。

Sora
Sora

Sora是OpenAI发布的一种文生视频AI大模型,可以根据文本指令创建现实和富有想象力的场景。

下载

【Linux】重定向操作的原理:修改文件描述符fd底层指向 (文件系统角度理解)

#include 
#include 
#include 
#include 
#include 
int main(){
    close(1);
    int fd = open("myfile", O_WRONLY|O_CREAT, 00644);
    printf("fd: %d\n", fd);//输出结果为1
    fflush(stdout);
    close(fd);
    exit(0);
}

2.输入重定向原理 同理,将0对应的输入流,底层fd指向键盘改为由log.txt输入。

【Linux】重定向操作的原理:修改文件描述符fd底层指向 (文件系统角度理解)

相关专题

更多
fgets在c语言中的用法
fgets在c语言中的用法

本专题整合了c语言中fgets用法介绍,阅读专题下面的文章了解更多详细内容。

16

2025.08.27

printf用法大全
printf用法大全

php中文网为大家提供printf用法大全,以及其他printf函数的相关文章、相关下载资源以及各种相关课程,供大家免费下载体验。

73

2023.06.20

fprintf和printf的区别
fprintf和printf的区别

fprintf和printf的区别在于输出的目标不同,printf输出到标准输出流,而fprintf输出到指定的文件流。根据需要选择合适的函数来进行输出操作。更多关于fprintf和printf的相关文章详情请看本专题下面的文章。php中文网欢迎大家前来学习。

281

2023.11.28

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1349

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

702

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

294

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

776

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

572

2023.07.06

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

72

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Rust 教程
Rust 教程

共28课时 | 4.5万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.4万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号