我尝试使用stdin
从fgets
读取,这是另一种阅读文件的方法。我的想法是,我应该能够编写尽可能多的行,并停止使用CTRL+C is entered or any other bash terminating commands
从stdin读取。
但问题是,如果我写一行,例如:
mr:x:1171:1101:Mikael Rännar:/Home/staff/mr:/usr/local/bin/tcsh
然后我按ENTER
提交它,然后按CTRL+C
然后它计算我终止与前一行相同的行。以下是一些例子:
mr:x:1171:1101:Mikael Rännar:/Home/staff/mr:/usr/local/bin/tcsh
<BLANKLINE>
*I PRESSED CTRL+C HERE*
Output:
Line 2: Encountered a <BLANKLINE>
Line 3: Encountered a <BLANKLINE>
1171:mr
示例2:
mr:x:1171:1101:Mikael Rännar:/Home/staff/mr:/usr/local/bin/tcsh
*I PRESSED CTRL+C HERE*
Output:
1171:mr
1171:mr
所以我的问题是,当发送终止命令(CTRL + C)时,如何阻止程序复制上一行?
编辑:这是我用来从流中读取的代码
void readFile(FILE *fp, list *userList) {
char line[1025];
int lineNumber = 1;
while (!feof(fp)) {
user *newUser = malloc(sizeof(user));
initializeStruct(newUser);
fgets(line, 1025, fp);
char *p = memchr(line, '\0', 1024);
if (p == NULL) {
fprintf(stderr, "Line %d: Line is too long!\n", lineNumber);
} else {
newUser->lineNumber = lineNumber;
parseLine(line, newUser);
list_insert(userList, newUser);
lineNumber++;
}
}
}
在bash中按下CTRL+D
时,fgets命令使用输入的上一行。
由于