gpt4 book ai didi

c - 如何将stdin(特定文件名)重定向到stdout(特定文件名)

转载 作者:行者123 更新时间:2023-11-30 15:21:41 26 4
gpt4 key购买 nike

我正在创建一个 shell 代码。基本上,我想将标准输入文件重定向到标准输出文件。例如,当我输入像 sort < hello.c > t.txt 这样的命令时,应该将 hello.c 文件复制到名为 t.txt 的新提到的文件中。

这是我的代码,当我输入 ls > t.txt 时,我能够重定向其他命令的输出。但是,我不知道如何使用 dup2 将一个文件的输入重定向到另一文件。

这是我的代码,我只发布循环,因为这是我必须创建逻辑的地方。

int in, out;

for (i = 0; i < arridx; i++) {
if(strcmp( array[i],"<")==0)
{
in = open(array[i+1], O_RDONLY);
array[i]=0;
// array[i+1]=0;
}
if(strcmp( array[i],">")==0)
{
out = open(array[i+1], O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IRGRP | S_IWGRP | S_IWUSR);
array[i]=0;
// array[i+1]=0;
}
}
dup2(in, 0);
dup2(out, 1);

// close unused file descriptors
close(in);
close(out);

输入数组就像

array[0]="sort"
array[1]="<"
array[2]="hello.c"
array[3]=">"
array[4]="t.txt"

最佳答案

事实上,每当你运行类似的东西时:

command < hello.c > t.txt

假设命令是您的 argv[0],且没有任何参数为 1,并且重定向由 shell 进行,则将发生重定向。

但是,在另一点上,如果使用重定向,请检查您的程序不是从命令提示符而是仅通过数组内容,
int dup2(int oldfd, int newfd);
- 创建文件描述符 oldfd 的副本。就您而言,

dup2(in, 0);
dup2(out, 1);

0 和 1 分别代表 stdin 和 stdout 文件描述符。因此,如果您想将输入重定向为从 stdin 而不是 hello.c (打开的文件为 in),并将输出重定向为从 stdout 而不是 t.txt (打开的文件为 out),那么应该'反之亦然,即

dup2(0, in);
dup2(1, out);

关于c - 如何将stdin(特定文件名)重定向到stdout(特定文件名),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29505303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com