在Linux中,重定向操作可以通过dup2
系统调用来实现,该调用用于复制文件描述符,确保两个文件描述符指向同一个文件表项。
以下是一个简单的C语言示例,演示如何使用dup2
来实现标准输入的重定向:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main() {
int old_stdin = dup(STDIN_FILENO); // 保存原始标准输入文件描述符
int file = open("input.txt", O_RDONLY); // 打开重定向文件
if (file < 0 || old_stdin < 0) {
perror("Error opening file or duplicating stdin");
exit(1);
}
dup2(file, STDIN_FILENO); // 将标准输入重定向到新文件
// 从标准输入读取数据,实际上是从input.txt读取
char buffer[100];
fgets(buffer, sizeof(buffer), stdin);
printf("Read from redirected stdin: %s", buffer);
close(file); // 关闭文件描述符
dup2(old_stdin, STDIN_FILENO); // 恢复标准输入到原来的文件描述符
close(old_stdin); // 关闭临时保存的文件描述符
return 0;
}
在这个例子中,程序首先保存了原始的标准输入文件描述符,然后打开了一个名为input.txt
的文件,并使用dup2
将标准输入重定向到这个文件。之后,当程序从stdin
读取数据时,实际上是从input.txt
中读取。最后,程序将文件描述符和标准输入恢复到它们原来的状态。