STDOUT_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。
文件描述符:Linux 系统中,把一切都看做是文件(一切皆文件),当进程打开现有文件或创建新文件时,内核向进程返回一个文件描述符,文件描述符就是内核为了高效管理已被打开的文件所创建的索引,用来指向被打开的文件,所有执行I/O操作的系统调用都会通过文件描述符。操作系统一级提供的文件API都是以文件描述符来表示文件。STDOUT_FILENO就是标准输入设备(一般是键盘)的文件描述符。
如果把文件符号:STDOUT_FILENO关了则无法正常输出
那么把输出看成一个文件数据输出,则可以利用STDOUT_FILENO来对该文件进行写操作,即可实现printf的功能
代码如下
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
int Simulation_Printf(char *str, int size)
{
if (write(STDOUT_FILENO, str, size) == -1)
{
perror("Simulation_Printf 调用失败");
return -1;
}
return 0;
}
int main()
{
char str[] = "-----模拟printf-----\n";
Simulation_Printf(str, strlen(str));
return 0;
}