重定向在shell :: ls中不起作用:无法访问>:没有这样的文件或目录

时间:2013-09-26 03:46:16

标签: c file shell fork io-redirection

我不知道为什么重定向在我编写的shell中不起作用。这是我的代码“

int i;     
     for (i=1; !args[i];i++)
         {
           if (args[i]== ">")
             {
               printf("argv[i] %s %d \n", args[i], i);
               int out; 
              // out = open("out", O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IRGRP | S_IWGRP | S_IWUSR);
                out=open("out", O_CREAT | O_WRONLY | O_TRUNC, S_IRWXU);


                int fdl=dup2(out,1);        
                close(out);   
                execvp(args[0],args);
             }

         }

这也是我收到的错误:

mysh> ls
basic_shell    basic_shell.c~    fork    fork_2  fork_cp.c
basic_shell.c  basic_shell_OK.c  fork_1  fork.c
mysh> ls > file
ls: cannot access >: No such file or directory
ls: cannot access file: No such file or directory

请让我知道什么是错的?

1 个答案:

答案 0 :(得分:2)

如果argschar*的数组,那么这个条件

if (args[i]== ">")

不符合您的想法。它比较指针而不是它们指向的内容。要比较字符串,您必须使用strcmp