我正在尝试在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);
}