[英]fgets error message loop -Linux shell in C
嘗試構建linux shell時,除頂部出現此錯誤消息外,其他所有方法都工作正常!
我設置LINE = 81,它打印出錯誤消息的總長度/ LINE次。 我在尋找解決方法時遇到了麻煩。 我認為這是因為它不斷循環,並且因為它始終具有該條件,所以它將被打印出來。 我不希望它終止,只是刷新並繼續輸入,有什么想法嗎? 我需要提供錯誤消息。
編輯:添加'\\ n'時,其功能仍然相同。
char commands[LINE];
while (fgets(commands, LINE, stdin)!= NULL) {
if (strlen(commands) >= LINE - 1) {
printf("Too Many arguments please enter %d characters\n",LINE-2);
continue;
}
childPID = fork();
if (childPID < 0) {
perror("fork");
exit(-1);
}
if (childPID == 0) {
parse(commands);
exit(0);
} else {
if (waitpid(childPID, &status, 0) !=childPID) {
perror("waitpid");
} else
if (!WIFEXITED(status)) {
printf("Exited Abnormally\n");
}
putc('\n', stdout);
fputs(PROMPT,stdout);
}
commands[0] = '\0';
}
exit(0);
}
您應該在錯誤消息的末尾加上\\n
:
printf("Too Many arguments please enter %d characters\n",LINE-2);
stdout
通常是行緩沖的,因此在您打印換行符之前不會刷新緩沖區。 當您的程序派生時,緩沖區將被復制到子進程中。 當子級調用exit()
,它將刷新其緩沖區的副本。 當父級調用putc('\\n')
它將刷新其副本。 結果,該消息被打印兩次。
所以原來我需要遍歷然后打印並相應地移動提示
while (fgets(commands, LINE, stdin)!= NULL) {
if (strlen(commands) > LINE-2) {
fprintf(stderr,"Too many chars\n");
while (getchar() != '\n' && !feof(stdin));
}
else
{
childPID = fork();
if (childPID < 0) {
perror("fork");
exit(-1);
}
if (childPID == 0) {
parse(commands);
exit(0);
} else {
if (waitpid(childPID, &status, 0) !=childPID) {
perror("waitpid is not responding");
} else
if (!WIFEXITED(status)) {
fprintf(stderr,"Unusually exit\n");
}
//putc('\n', stdout);
//fputs(PROMPT,stdout);
}
}
putc('\n', stdout);
fputs(PROMPT,stdout);
}
exit(0);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.