【问题标题】:C program does not work as expected when stdin is supplied using cat使用 cat 提供标准输入时,C 程序无法按预期工作
【发布时间】:2017-06-12 15:43:07
【问题描述】:

这是一个简短的 C 程序:

#include<stdio.h>

int main (void){

    char cmd;

    while(scanf("%c", &cmd) != EOF){

        if(cmd == 'q'){
            printf("Thanks\n");
            return 0;
        }
    }

return 0;
}

当执行以下程序并使用键盘输入cmd 的值时,一切正常。

$ ./catproblem
q
Thanks
$

但是,当我尝试使用 cat 管道输入时,输入 q 时程序不会立即终止。由于某种原因,它等待任何其他输入,然后才终止。

$ cat | ./catproblem
q
Thanks
anything
$

是什么导致了这种行为?如果cat 用于输入,是否可以解决此问题,以便程序按预期工作?

【问题讨论】:

    标签: c stdin cat


    【解决方案1】:

    问题是cat 没有终止,您的shell (bash) 等待管道中的所有进程终止,然后再继续。当您键入带有anything 的行时,cat 会尝试写入管道,获取 SIGPIPE 信号并终止。

    【讨论】:

    • 这是有道理的。谢谢解释!
    猜你喜欢
    • 2021-06-27
    • 2022-06-12
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多