linux用C语言实现shell命令<>重定向
时间: 2024-02-03 18:13:32 浏览: 137
在 Linux 中使用 C 语言实现 shell 命令 <> 的重定向,可以使用 dup2() 函数来实现。dup2() 函数可以将一个文件描述符的内容复制到另一个文件描述符中,从而实现文件重定向。
下面是一个简单的示例程序,可以实现 “<” 和 “>” 的文件重定向功能:
```c
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char *argv[]) {
int in_fd, out_fd;
char *in_file, *out_file, *cmd;
if (argc != 4) {
fprintf(stderr, "Usage: %s <input_file> <output_file> <command>\n", argv[0]);
return 1;
}
in_file = argv[1];
out_file = argv[2];
cmd = argv[3];
// 打开输入文件
in_fd = open(in_file, O_RDONLY);
if (in_fd == -1) {
perror("open input file");
return 2;
}
// 打开输出文件
out_fd = open(out_file, O_CREAT|O_WRONLY|O_TRUNC, 0644);
if (out_fd == -1) {
perror("open output file");
return 2;
}
// 将输入文件重定向到标准输入
if (dup2(in_fd, STDIN_FILENO) == -1) {
perror("dup2 input file");
return 3;
}
// 将输出文件重定向到标准输出
if (dup2(out_fd, STDOUT_FILENO) == -1) {
perror("dup2 output file");
return 3;
}
// 执行命令
if (system(cmd) == -1) {
perror("system command");
return 4;
}
// 关闭文件
close(in_fd);
close(out_fd);
return 0;
}
```
在上面的程序中,我们首先打开输入文件和输出文件,并将它们分别重定向到标准输入和标准输出。然后执行传入的命令,命令的输出将被重定向到输出文件中。最后关闭文件描述符。
使用该程序可以实现以下命令的效果:
```bash
$ ./redirect input.txt output.txt wc -l
```
该命令会将输入文件 input.txt 的内容通过 “<” 重定向到 wc 命令的标准输入中,将 wc 的输出通过 “>” 重定向到 output.txt 文件中。最后输出文件 output.txt 中行数的结果。
阅读全文