问题描述
我正在为一个类编写自定义外壳程序,并且正在使IO重定向正常工作。以下代码是一个原型,但是如果不确定>
的代码,我不确定为什么我的// deal with <
重定向不起作用。在我保留<
部分的那一刻起,我对>
的重定向。我在做什么错了?
此外,在我execvp
每条命令之前,我都会打印出命令参数。出于某种原因,当我输入带有>
重定向的命令时,直到我输入另一个没有>
或<
的简单命令时,这些参数才会被打印出来。我已尝试删除close(fd)
和其他一些内容,但是我不确定为什么在尝试打印命令自变量时stdout
是关闭的。
我在其中运行命令并处理>
的代码:
// runs code
void runSimple(char **args)
{
pid_t pid;
pid = fork();
int i = 0;
int fd;
if (pid < 0) // error
{
printf("An error occured while forking child for runSimple.\n");
exit(-1);
}
else if (pid == 0) // child
{
// loop and deal with > or <
while (args[i])
{
// deal with >
if (!strcmp(args[i],">"))
{
printf("in >\n");
fd = open(args[i + 1],O_RDWR | O_CREAT | O_Trunc,0644);
printf("opened file: %s\n",args[i + 1]);
if (fd < 0)
{
perror("runSimple: error opening argument for >.");
exit(1);
}
dup2(fd,1); // make child's stdout into file
close(fd);
args[i] = NULL;
}
// deal with <
// if (!strcmp(args[i],"<"))
// {
// printf("in <\n");
// fd = open(args[i + 1],O_RDONLY);
// if (fd < 0)
// {
// perror("runSimple: error opening argument for <.");
// exit(1);
// }
// dup2(fd,0);
// close(fd);
// args[i] = NULL;
// }
i++;
}
// print out args before calling exec
i = 0;
while (args[i])
{
printf("cmd token: %s\n",args[i++]);
}
// exec input with appropriate fd
execvp(args[0],args);
perror("execvp");
}
// printf("am adult\n");
int status;
waitpid(pid,&status,0);
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)