1

私が書いたシェルでリダイレクトが機能しない理由がわかりません。これが私のコードです」

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 に答える