简体   繁体   中英

Redirection doesn't work in shell:: ls: cannot access >: No such file or directory

I don't know why redirection doesn't work in the shell I have written. Here's my code"

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);
             }

         }

Also here's the error I receive :

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

Please let me know what's wrong?

If args is an array of char* , then this condition

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

does not do what you think it does. It compares the pointers and not what they point to. To compare string you have to use strcmp .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM