Linux 文件系列:深入理解文件描述符fd,重定向,自定义shell当中重定向的模拟实现
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
// 打开文件并返回文件描述符
int open_file(char *file_path, int flags, int mode) {
int fd = open(file_path, flags, mode);
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
}
return fd;
}
// 关闭文件描述符
void close_file(int fd) {
if (close(fd) == -1) {
perror("close");
exit(EXIT_FAILURE);
}
}
// 模拟重定向的函数
void redirect(int old_fd, int new_fd) {
if (dup2(old_fd, new_fd) == -1) {
perror("dup2");
exit(EXIT_FAILURE);
}
close_file(old_fd);
}
// 示例:自定义shell中的重定向模拟
int main() {
char *input_file = "input.txt";
char *output_file = "output.txt";
int input_fd = open_file(input_file, O_RDONLY, 0);
int output_fd = open_file(output_file, O_WRONLY | O_CREAT | O_TRUNC, 0644);
// 重定向标准输入和输出
redirect(input_fd, STDIN_FILENO);
redirect(output_fd, STDOUT_FILENO);
// 此处可以执行需要进行输入输出重定向的命令
// 例如: system("cat");
// 恢复标准输入和输出
redirect(STDIN_FILENO, input_fd);
redirect(STDOUT_FILENO, output_fd);
close_file(input_fd);
close_file(output_fd);
return 0;
}
这段代码首先定义了打开文件和关闭文件的函数,然后定义了模拟重定向的函数。在main函数中,它展示了如何打开输入输出文件,并通过调用redirect函数来重定向标准输入和输出,接着可以执行需要进行输入输出重定向的命令,最后恢复标准输入和输出的重定向,并关闭文件描述符。
评论已关闭