我已经实现了一个支持重定向的shell但是在完成redirtection之后它得到了我的shell。如何以返回shell(stdout)的方式管理它?
int i;
for (i=1; args[i];i++)
{
if (strcmp(args[i],">")==0)
{
printf("argv[i] %s %d \n", args[i], i);
int out = open(args[i+1], O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IRGRP | S_IWGRP | S_IWUSR);
close(1);
int fdl=dup2(out,1);
close(out);
execvp(args[0],args);
// open(STDOUT, ">>", \$out); //doesn't work~!
}
}
这是我执行shell时会发生的事情:
./basic_shell
mysh> pwd > out_pwd
argv[i] > 1
pwd: ignoring non-option arguments
并按预期创建out_pwd并将pwd结果写入其中。 但是当我尝试
时mysh>ls > out_ls
我收到此错误:
ls cannot access >: No such file or directory
你能给我一些关于如何解决它的提示吗?
答案 0 :(得分:2)
您希望简单地保存映射的表示形式,而不是在shell进程中实际转换文件描述符,而是在fork
之后但在exec
命令之前执行替换。< / p>
答案 1 :(得分:0)
首先关闭手柄
然后在win32 ^中调用kernel32 /或console api中的AllocConsole来创建控制台