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

Terminate C program which stdin is linked to output of other program

我有一个程序 x,我想彻底终止它。 您可以通过简单地执行 ./x 并使用终端直接向 stdin 写入行并通过写入 exit.

来终止它 运行

但是,如果您使用:cat file.txt | ./xstdin 现在是从文件中通过管道传输的,因此您永远不能键入 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;
    }
    //...
  }
}

当您从管道读取了所有输入后,EOF 将上升以指示已达到完整输入。 在您的示例中,这将大致等同于退出,因此您还可以检查 getline 的 return 值以查看 EOF 是否已达到(在这种情况下 -1 将是 return编辑).

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

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