📅  最后修改于: 2023-12-03 15:36:10.817000             🧑  作者: Mango
在 C 语言中,标准输出是一种常用的输出方式。它通常是指将数据输出到屏幕上或者终端设备上。在 Unix/Linux 系统中,标准输出是通过文件描述符(File Descriptor,简称 fd)来进行管理和操作的。标准输出 fd 编号是 1。
文件描述符(File Descriptor)是 Linux/Unix 操作系统中对文件或 I/O 设备进行访问的抽象句柄。在 Linux/Unix 系统中,一切皆文件,包括磁盘文件、串口、网络套接字、管道等等。
文件描述符是一个非负整数,是内核为了管理文件而维护的一张表的索引,它记录了每个进程打开的文件或设备信息。每个进程都有一张表,记录着该进程打开的文件和设备,文件描述符就是这张表中的索引。
在 Linux/Unix 系统中,标准输入、标准输出和标准错误是三个标准流,它们分别对应文件描述符 0、1、2。
在 C 语言中,可以使用 printf() 函数输出数据到屏幕上。printf() 函数使用标准输出来输出数据。标准输出 fd 编号是 1。我们也可以通过修改标准输出 fd 来改变数据输出的位置。下面是一个使用 dup() 函数将标准输出重定向到文件的示例代码:
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
int main() {
int fd;
char buf[] = "Hello, world!\n";
fd = open("output.txt", O_CREAT|O_WRONLY|O_TRUNC, 0644);
if (fd != 1) { // 判断文件是否打开成功
dup2(fd, 1); // 重定向标准输出到文件中
close(fd); // 关闭文件
}
printf("%s", buf); // 输出数据到文件中
return 0;
}
在上面的代码中,我们首先使用 open() 函数创建文件 output.txt,并以写入方式打开,如果文件打开成功,那么我们就使用 dup2() 函数将标准输出重定向到这个文件中。最后,我们输出数据到标准输出中,由于标准输出已经被重定向到了文件中,因此数据会输出到 output.txt 文件中。