重定向后如何返回stdout?

时间:2013-09-26 23:45:49

标签: c file shell stdout io-redirection

我已经实现了一个支持重定向的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

你能给我一些关于如何解决它的提示吗?

2 个答案:

答案 0 :(得分:2)

您希望简单地保存映射的表示形式,而不是在shell进程中实际转换文件描述符,而是在fork之后但在exec命令之前执行替换。< / p>

答案 1 :(得分:0)

首先关闭手柄
然后在win32 ^中调用kernel32 /或console api中的AllocConsole来创建控制台