我对C比较陌生,正在编写一个我们需要编写shell的作业。 shell必须具有大多数标准功能,包括文件重定向和管道。文件重定向必须使用dup2完成,我遇到了这个问题,我找不到Stack Overflow或其他地方的相关解决方案。
我创建了一个结构,它存储要在shell中执行的语句,以及变量input_redir和output_redir中的输入或输出重定向文件指针。如果为其中一个设置了文件指针,则打开该文件并保持打开状态直到用于执行。对于每个语句,我检查input_redir或output_redir文件指针是否为NULL,如果是,我以相关的方式使用dup2来重定向输入或输出。我的代码如下:
if(pid == 0) {
if(stat->input_redir != NULL) {
dup2(fileno(stat->input_redir), STDIN_FILENO);
fclose(stat->input_redir);
}
if(stat->output_redir != NULL) {
dup2(fileno(stat->output_redir), STDOUT_FILENO);
fclose(stat->output_redir);
} ...
输出到文件工作正常,允许我执行'echo hello world>等命令。 testOutput.txt',但文件中的输入根本不起作用,而是打印一个空行,然后继续等待下一个用户输入。我看过dup2手册页,似乎无法弄清楚这里出了什么问题 - 大概是输入导致了错误?我正在使用execvp执行命令,如果我理解正确,它应该响应重定向。
非常感谢您的帮助!