在c/c++中定义了三个标准宏:
这些宏分别对应不同的设备句柄
stdout对应的是屏幕,一般来说指的是终端窗口上的显示文字信息的屏幕!
stdin对应的是输入缓冲区
stderr和stdout对应的是一样的,这个宏是给perror使用的,这里就顺便补充一下printf与perror的区别在于哪儿吧!
printf会将字符先写入输入缓冲区,在输出到stdut上,而perror是直接输入到stderr上,也就是说略过这个过程,要知道输出缓冲区当屏幕爆满时会自动清除,这个是由操作系统来完成的,而输入缓冲区的是根据栈大小来的,一旦超出栈大小范围就会被操作系统卡嚓掉!
并且stdin.h头文件里还定义了error变量,当我们调用标准c库函数时出了错误,一般此变量会被设置,具体可以查看相关文档对一些函数的错误码介绍,就像c++里的异常流一样!try~
具体点来说当我们对stdout文件句柄进行操作时其实c语言就知道我们是想把数据输出到屏幕上,所以就会内部调用相关内核函数来输出,具体是由操作系统来完成的包括printf!
就像linux下malloc内部调用的是brk/sbrk函数一样,而windows内部则调用的是HeapAlloc一样,毕竟内存在MMU进行虚拟地址映射以后内存的管理就交给操作系统了,操作系统通过总线与MMU交互来分配内存,所以根据不同的系统平台会提供不同的接口~
比如printf是将字符输出到终端或dos界面上,在windows下是输出到dos界面上,即内部调用的是windows操控dos系统上的api,我们的标准c语言程序均运行的dos系统之上,而linux下则是通过shell直接输出到终端界面上~,内部调用的据博主推测应该是shell上的echo脚本命令,所以linux下是shell,而在运行shell的就是终端程序!