printf函数打印
程序运行的时候,会自动打开三个文件,分别是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.hstruct _IO_FILE
{//其他的先不考虑...//...int _fileno; //封装的文件描述符
}
原因解释
stdout对应的结构体 中封装好的文件描述符 fd = 1
printf函数要打印内容那就去找stdout,stdout对应的结构体中封装好的文件描述符 fd = 1,通过fd = 1定位到对应的文件结构体地址,然后向这个文件输送内容。
下标为1对应的文件替换成了其他文件log.txt
这就是printf打印的过程,只认stdout里包含的fd,即只认识下标,不管这个下标指向哪。
原文链接:printf函数打印(一)—— 过程解析篇_仲夏夜之梦~的博客-CSDN博客_printf 打印结构体
printf函数打印相关推荐
- Python直接调用C库的printf()函数打印一条消息
github博客传送门 csdn博客传送门 话不多说直接上代码 # 直接从 C 库中调用 printf()函数打印一条消息 # Windows 中的 C 库位于 C:\WINDOWS\system32 ...
- printf函数打印(一)—— 过程解析篇
程序运行的时候,会自动打开三个文件,分别是stdin.stdout.stderr 这三个文件对应的外设分别是 键盘.显示器.显示器 这三个文件对应的文件描述符为 0.1.2 printf函数在显示器上 ...
- codeblocks printf函数打印不出来_最全C语言基本程序交互函数之输出到屏幕
前言 上一栏目主要讲解了各种数据类型的知识,大家先闭眼回顾一下数据类型的知识哦.本章节主要内容是讲解程序的基本交互设计之程序的输出.程序和人交互无非就是通过外设进行输入信息,C语言中基本的交互的基本流 ...
- 【STM32学习5】STM32使用printf函数 打印到电脑串口助手
本文所使用的方法与代码参考自正点原子,如果想要详细了解这方面的知识,请阅读正点原子官方提供的文档. 一.背景 在开发STM32应用时,将一些信息通过串口打印到电脑上是常用的调试手段.C语言标准库中的p ...
- stc单片机使用printf()函数打印
串口波特率初始化: 利用stc-isp工具生成初始化代码, 在串口初始化函数中添加 **TI=1;**如下图,否则printf()无法输出. void UartInit(void) //9600bps ...
- 通过uart串口和printf函数打印
#include "stdio.h" int __io_putchar(int ch) { HAL_UART_Transmit(&huart1,(uint8_t *)&am ...
- C语言程序设计基础及应用实例---第一节 printf函数的使用
(1)printf函数打印字符串 #include <stdio.h>int main(void) {printf("Helloworld!\r\n");return ...
- 这两种printf()函数重定向方法,太实用了
作者:echobright 原文链接:https://blog.csdn.net/qq_29344757/article/details/75363639 在前面学习了STM32的串口编程,通过USA ...
- STM32的printf函数重定向
版权声明:原创文章,请持怀疑态度阅读,欢迎转载,但请注明文章出处. https://blog.csdn.net/qq_29344757/article/details/75363639 在前面学习了S ...
最新文章
- 我看你还能坚持多久?!
- linux远程调用的脚本在ssh时报错,linux:ssh远程调用tomcat脚本时候出错
- PKU 学生的反馈 2009-1
- h5优秀控件_H5前端学习的js插件大全,基本包含了大部分的前端最前沿的js插件和库。...
- VSCode 实时预览HTML网页效果 - Live Server插件
- 软件的极简主义的三个大敌:配置文件,冗余的参数,和大量复杂的接口。
- vue ---- webpack -插件 html-webpack-plugin
- 【4】测试用例设计-判定表法
- TortoiseGit和msysGit安装及使用笔记(windows下使用上传数据到GitHub)[转]
- 货币代码php,PHP货币换算程序代码_PHP教程
- 添加源显示未找到使用主机服务器,未能找到主机指定使用服务器
- 尚来古籍——江氏族谱
- 在Ubuntu中安装并配置Pycharm教程
- 【python】把Excel中的数据在页面中可视化
- 基于语法分析的公式分析器设计
- css和html的用法,HTML与CSS之CSS的基本使用
- nessus安装及使用
- 面试技巧自我介绍大全
- 技术干货:Apache Pulsar 在移动云上的应用
- ctfshow 做题 萌新 模块(3)