0

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

0 回答 0