gpt4 book ai didi

c - 在 C 中实现 Shell : Output redirection is writing output file name to output file rather than command results

转载 作者:行者123 更新时间:2023-11-30 16:19:19 27 4
gpt4 key购买 nike

我正在用 C 语言实现一个带有输入和输出重定向的 shell。我可以成功进行输入重定向,但输出重定向不起作用。例如,如果我执行 ls > out.txt,则 out.txt 包含文本“out.txt”,而不是 ls 命令的结果。

我查看了其他堆栈溢出答案以及 open() 和 creat() 文档,但未能解决问题。

如果检测到输出重定向 (>),这是我当前拥有的代码:

if(outRedirect == 1)
{
//I have tried using open() and creat()
//int out = open(args[1], O_WRONLY|O_CREAT|O_TRUNC, 0640);
int out = creat(args[1], 0640);
dup2(out, STDOUT_FILENO);
close(out);
//reset flag to 0
outRedirect = 0;
//execute command
execvp(args[0], args);
}

我希望 out.txt 文件包含:

a.out
in.txt
makefile
out.txt
README
simple-shell
simple-shell.c

但它包含

out.txt

最佳答案

将相关评论转化为答案。

您必须从命令行中删除重定向文本。命令无法看到 shell 完成的任何重定向。您很可能要求将文件列出到文件中。

What do you mean I "have to remove the redirection text from the command line"?

您必须确保当您的 shell 执行 ls > out.txt 时,>out.txt 都不会传递给ls。我怀疑你正在传递文件名。至少,它解释了为什么您在输出文件中(仅)看到文件名。

Ajay Brahmakshatriya said :

I think the command you are finally executing is ls out.txt. Like Jonathan said, you are not removing the second argument. This causes ls to just print out.txt (since it is in the directory) and that is all that goes into the output.

<小时/>

Thank you both! That ended up being my issue.

关于c - 在 C 中实现 Shell : Output redirection is writing output file name to output file rather than command results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55658154/

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