我有一个程序x
,我想彻底终止该程序。
您只需执行./x
即可运行它,并使用终端直接将行写入stdin
并通过写入exit
终止它。
但是,如果您使用:cat file.txt | ./x
,则stdin
现在已从文件中传递出来,因此您永远不能键入exit
。
结束该程序的最好方法是,一旦从文件中读取了最后一行,它就会自动终止。
或者,如果可能的话,我想将stdin
重新路由回终端,以进一步允许像以前一样手动输入。
以下是一些示例代码:
int main() {
// ...
while (ongoing) {
size_t n = 0;
char* ln = NULL;
getline(&ln, &n, stdin);
strtok(ln, "\n");
strtok(ln, "\r");
if (strcmp("exit", ln) == 0) {
break;
}
//...
}
}
答案 0 :(得分:2)
您正在使用getline读取您的输入。 getline在EOF上返回-1。这很容易。
if (-1==getline(...))
break;
答案 1 :(得分:1)
当您从管道中读取所有输入后,EOF将升高以指示已达到完整输入。
在您的示例中,这将等同于exit,因此您还可以检查getline
的返回值以查看EOF是否已达到(在这种情况下将返回-1)。