终止标准输入链接到其他程序输出的C程序

时间:2019-03-07 14:50:14

标签: c pipe stdin

我有一个程序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;
    }
    //...
  }
}

2 个答案:

答案 0 :(得分:2)

您正在使用getline读取您的输入。 getline在EOF上返回-1。这很容易。

if (-1==getline(...))
   break;

答案 1 :(得分:1)

当您从管道中读取所有输入后,EOF将升高以指示已达到完整输入。 在您的示例中,这将等同于exit,因此您还可以检查getline的返回值以查看EOF是否已达到(在这种情况下将返回-1)。