printf函数打印

printf函数通过文件描述符1(stdout)向显示器发送数据。当fd=1被重定向到其他文件时,printf会将内容写入该文件。文章通过分析printf的实现和文件结构体,解释了printf如何识别并写入到相应文件。
摘要由CSDN通过智能技术生成

程序运行的时候,会自动打开三个文件,分别是stdin、stdout、stderr

这三个文件对应的外设分别是 键盘、显示器、显示器

这三个文件对应的文件描述符为 0、1、2

printf函数在显示器上打印数据是如何实现的??

一、通过write函数理解打印的过程 

 

我们要打印数据,本质上就是向 fd = 1指向的文件输送数据(因为默认情况下 fd = 1指向的文件是显示器文件)

所以我们 通过write函数向fd = 1 写入数据 -----> 向显示器文件写入数据

 二、关闭 fd = 1,测试 printf 函数是否打印

fd = 1 字符打印到显示器上

测试代码

 测试结果

显示器上没有打印字符,但是字符被写入到 log.txt 文件当中了。

open函数:建立 struct files 和 文件结构体  之间的联系

close函数:断开 struct files 和 文件结构体  之间的联系

 

三、原因分析

printf函数的功能:在显示器上打印指定的内容,向显示器文件stdout中写入内容

首先,我们看看这里所谓的stdout到底是什么?!

stdout 的类型是File*,也就是对应文件结构体File的地址

每个文件结构体FILE中必定包含 封装好的文件描述符(如下)

typedef struct _IO_FILE FILE;   //在usr/include/stdio.h
 
struct _IO_FILE
{
    //其他的先不考虑...
    //...
    int _fileno; //封装的文件描述符
}

原因解释

stdout对应的结构体 中封装好的文件描述符 fd = 1

printf函数要打印内容那就去找stdout,stdout对应的结构体中封装好的文件描述符 fd = 1,通过fd = 1定位到对应的文件结构体地址,然后向这个文件输送内容。

下标为1对应的文件替换成了其他文件log.txt

这就是printf打印的过程,只认stdout里包含的fd,即只认识下标,不管这个下标指向哪。

 原文链接:printf函数打印(一)—— 过程解析篇_仲夏夜之梦~的博客-CSDN博客_printf 打印结构体

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值