检查来自C程序的UNIX命令行参数,管道和重定向

Fre*_*red 2 c unix command-line arguments

我有一些问题要弄清楚一旦我发现缺少命令行参数,我可以如何维护管道和重定向shell的功能.

例如,如果我使用scanf调用,那将使用重定向或来自shell的管道,但如果没有这个,我会得到一个我不想要的提示.

我想通过argv [],管道或重定向接受命令行参数,但我无法弄清楚如何在得到提示时这样做.如果我例如尝试这样的事情:

if(argc < 2)
    exit(0);
Run Code Online (Sandbox Code Playgroud)

如果我尝试这个程序,程序将终止:

echo arg | myProgram
Run Code Online (Sandbox Code Playgroud)

或这个:

myProgram < fileWithArgument
Run Code Online (Sandbox Code Playgroud)

我试图查看这个,但我总是得到一些bash脚本参考.

小智 7

处理这种情况的常用方法是检查标准输入流是否连接到终端,使用isatty或类似功能,具体取决于您的操作系统.如果是,则从命令行获取参数,如果没有(它被重定向),则读取标准输入.