Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在getopt中停止管道?_C - Fatal编程技术网

C 如何在getopt中停止管道?

C 如何在getopt中停止管道?,c,C,我正试图在getopt中运行类似的程序 ./bmptool-s2 example.bmp |./bmptool-r 90-o out.bmp 我的代码可以运行,但我想知道是否有办法不运行此命令 ./bmptool-r 90-o out.bmp 如果我跑步时出了什么问题 ./bmptool-s2 example.bmp 以下方法用于捕获用户是否输入了不存在的案例,并在需要时退出程序。当我只运行一个命令时,它可以工作,但当我将命令链接在一起时,它仍然运行下面的命令,给我一些我不想要的输出。任何帮助都

我正试图在getopt中运行类似的程序

./bmptool-s2 example.bmp |./bmptool-r 90-o out.bmp

我的代码可以运行,但我想知道是否有办法不运行此命令

./bmptool-r 90-o out.bmp

如果我跑步时出了什么问题

./bmptool-s2 example.bmp

以下方法用于捕获用户是否输入了不存在的案例,并在需要时退出程序。当我只运行一个命令时,它可以工作,但当我将命令链接在一起时,它仍然运行下面的命令,给我一些我不想要的输出。任何帮助都将不胜感激。谢谢

if (err || optind + 1 < argc) {
    fprintf(stderr, usage, argv[0]);
    exit(-1);
}
if(err | | optind+1
这与getopt甚至C无关。
foo | bar
告诉shell并行运行命令
foo
bar
,其中
foo
的输出连接到
bar
的输入。您无能为力,因为两个程序都会立即启动。当我运行第二个命令时,是否无法“捕获”它?比如,如果我在第一个命令中输出“quit”之类的内容,我可以在运行第二个命令并退出时查看这是否是输入吗?或者我完全误解了管道?当然,如果你控制管道的两侧,你可以这样做。你可以在输入时观察EOF/错误,只需不向标准输出写入任何内容,并在错误时退出。。。如果第一个实例失败并退出,第二个实例将在stdin上获得EOF,并且也可以退出;然后./bmptool-r 90-o out.bmp,不过您可能希望在中间文件名(
mktemp
)和信号情况下的清理(
trap
)方面更聪明一些。