0

C でシェルを作成しようとしています。ファイルのリダイレクト以外はすべて機能します。私のコードは正しいように見え、それを機能させるためにあらゆることを試しました。問題は、ユーザーが >> (例: ls -l >> foo.txt) を入力すると、既存のファイルに追加されるはずですが、私のコードではファイルが上書きされることです。私のプログラムは >> を検出していますが、freopen に "a+" があるため、追加ではなく上書きする理由がわかりません。すべての引数は正しく渡されていますが、再開は困難です。

私の問題コード:

if(fork()==0)
            {
                int error;
                FILE *fp;
                if(tokens[1]!=NULL)
                {

                    char *args[3] = {tokens[0], tokens[1], NULL};
                    int i=0;
                    int argument = 2;

                    for(i = 0; i < strlen(user_input_copy);i++)
                    {
                        if(user_input_copy[i] == '<')
                        {
                            printf("HERE <\n");
                            fp = freopen(tokens[argument],"r",stdin);
                        }

                        else if(user_input_copy[i] == '>' && user_input_copy[i+1] == '>')
                        {
                            printf("HERE >>\n");
                            fp = freopen(tokens[argument],"a+",stdout);
                        }

                        else if(user_input_copy[i] == '>')
                        {
                            printf("HERE >\n");
                            fp = freopen(tokens[argument],"w+",stdout); 
                        }

                    }
                    error = execvp(args[0],args);
          }
4

0 に答える 0