Freopen拒绝附加文件只是覆盖

时间:2015-04-21 00:03:24

标签: c file shell freopen

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

0 个答案:

没有答案