检查C程序中的UNIX命令行参数,pipe道和redirect

我有一些问题,一旦我发现有缺less的命令行参数,我怎么可以维护一个shell的pipe道和redirectfunction。

如果我例如使用一个scanf调用,这将与shell中的redirect或pipe道一起工作,但是如果没有这个,我会得到一个我不想要的提示。

我想通过argv [],一个pipe道或重新接受命令行参数,但我不知道如何做出来得到提示。 如果我例如尝试这样的事情:

if(argc < 2) exit(0); 

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

 echo arg | myProgram 

或这个:

 myProgram < fileWithArgument 

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

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

短版:你不能这样做。

管道和重定向说明符不是程序的参数,而是它们是调用shell的命令,并且在程序的运行实例存在之前就被处理了。 shell不会将它们传递给argv或其他变量中的程序,也不能以可靠的方式发现它们。

尼尔已经给你方式来确定你是否连接到一个终端 。

在你的例子中,你正在使用管道重定向,都是echo arg | myProgram echo arg | myProgrammyProgram < filesWithArguments发送输出到您的程序的STDIN

如果要读取这些值,请在STDIN文件描述符上使用scanffread

如果您想要将文件内容作为可执行文件的参数列表,则需要像这样使用它:

 # This will pass `lala` as a variable myProgram `echo lala`