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