我正在尝试在 C 中制作一个 shell。除了文件重定向之外,一切正常。我认为我的代码看起来是正确的,并且我已经尝试了一切以使其正常工作。问题是,当用户输入 >>(例如 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);
}