1

我不知道为什么重定向在我编写的 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

请让我知道有什么问题?

4

1 回答 1

2

如果args是 的数组char*,那么这个条件

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

不做你认为它做的事。它比较指针而不是它们指向的内容。要比较字符串,您必须使用strcmp.

于 2013-09-26T03:51:17.067 回答