我正在尝试从中读取stdin
,fgets
这是从文件中读取的另一种方式。我的想法是我应该能够写尽可能多的行,并停止从标准输入读取CTRL+C is entered or any other bash terminating commands
.
但是问题是,如果我写一行,例如:
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++;
}
}
}
在CTRL+D
bash 中按下 时,fgets 命令使用输入的前一行。
谢谢