C stdin和CTRL + C复制上一行

时间:2017-09-03 11:02:20

标签: c stdin fgets feof

我尝试使用stdinfgets读取,这是另一种阅读文件的方法。我的想法是,我应该能够编写尽可能多的行,并停止使用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命令使用输入的上一行。

由于

0 个答案:

没有答案