我正在做很多迭代以模拟bash
命令 (Homework) 。
代码运行良好,但问题是经过几次输入迭代后,程序开始出现一些缓冲区问题。我怀疑这与所有的\n
命中有关Enter
。
例如,代码开头是这样的:
#define BUFFER 4096
#define RUN_FOREVER 1
#define ERROR_SIGN -1
#define TRUE 1
#define FALSE 0
int main(int argc , char * argv[] )
{
char input[BUFFER];
//Get always a command line from the user.
while(RUN_FOREVER)
{
if (isatty(0))
{
// input is from terminal
// need to put something here
}
char **separatedFormAmpersand ;
int ampersandsCtr = 0, k=0,r=0;
char *stringBeforeAmpersand = NULL;
printf("$ ");
memset(input, '\0', BUFFER);
char ch;
scanf("%[^\n]",input);
scanf("%c",&ch);
if(0 == strcmp(input, "exit"))
break;
//Separate the command according to the "&".
stringBeforeAmpersand = strtok( input, "&");
... // more code (quite a lot , frankly)
现在,如果用户点击以下输入:
ls Debug/ | grep r
ls >> file.jer & ls & ls & ls
ls >> file.jer
ls
一个接一个,然后当我点击输入数字时代码无法识别命令3
。
如果我在一次代码运行中输入每个输入,一切都会完美运行。
任何想法如何清理缓冲区?也许fflush
?
谢谢!