C Lang - 如何检测文件是否已用作输入参数?
C Lang - How to detect if a file has been used as input argument?
我在处理传递给我的程序的参数时遇到问题。用户应该能够提供自己的参数或在启动时提供包含参数的 JSON 文件。
个人可以在发布会上提出自己的论点。例如:
prog --x 1 --y 2
个人也可以通过文件输入发送参数(JSON)。
prog < arguments.json
我遇到的问题是试图识别文件是否已通过 stdin
。更具体地说,如果用户在没有任何参数或文件输入的情况下运行程序。
我可以通过检查 argc
轻松找出是否传递了任何参数,但随后我的程序卡在验证是否传递了任何参数 stdin
通过这个 ;
[...]
char str[150];
char c;
while ((c = fgetc(stdin)) != EOF) {
strncat(str, &c, sizeof(char));
}
[...]
在没有参数的情况下启动程序后,它位于终端等待我的输入(它不应该这样做,因为没有文件输入)。仅当用户在启动时未输入任何参数且程序尝试检查 stdin
时才会出现问题。无论如何,我在使用 fgetc
之前检查 stdin
是否为空?
不容易。有两个紧迫的问题。
如前所述,检测标准输入是否绑定到文件并不容易。您可能会使用 isatty
但可能有完全正当的理由为什么您希望将带有 真实 输入的文件发送到您的程序,而不是选项。
正如前一点所预示的,如果您使用标准输入来传递参数,那么您就无法再将其用于 "proper" 输入。现在可能是您的程序不需要输入,在这种情况下没问题。但是,如果你想提供一个带有选项 和 允许输入的文件,事情就开始变得困难了。
通常的处理方式是不对选项使用标准输入,而是提供另一个选项来指定要使用的文件。
例如,文件 my.options
可能包含 --x 1 --y 2
,您可以 运行 您的程序是以下之一:
prog --opts-file=my_options.json
prog -o my_options.json
这需要额外的间接级别,因为您必须处理从文件中读入的命令行选项 和 选项,但它为 [=14= 留下了标准输入] 打算:-)
我在处理传递给我的程序的参数时遇到问题。用户应该能够提供自己的参数或在启动时提供包含参数的 JSON 文件。
个人可以在发布会上提出自己的论点。例如:
prog --x 1 --y 2
个人也可以通过文件输入发送参数(JSON)。
prog < arguments.json
我遇到的问题是试图识别文件是否已通过 stdin
。更具体地说,如果用户在没有任何参数或文件输入的情况下运行程序。
我可以通过检查 argc
轻松找出是否传递了任何参数,但随后我的程序卡在验证是否传递了任何参数 stdin
通过这个 ;
[...]
char str[150];
char c;
while ((c = fgetc(stdin)) != EOF) {
strncat(str, &c, sizeof(char));
}
[...]
在没有参数的情况下启动程序后,它位于终端等待我的输入(它不应该这样做,因为没有文件输入)。仅当用户在启动时未输入任何参数且程序尝试检查 stdin
时才会出现问题。无论如何,我在使用 fgetc
之前检查 stdin
是否为空?
不容易。有两个紧迫的问题。
如前所述,检测标准输入是否绑定到文件并不容易。您可能会使用
isatty
但可能有完全正当的理由为什么您希望将带有 真实 输入的文件发送到您的程序,而不是选项。正如前一点所预示的,如果您使用标准输入来传递参数,那么您就无法再将其用于 "proper" 输入。现在可能是您的程序不需要输入,在这种情况下没问题。但是,如果你想提供一个带有选项 和 允许输入的文件,事情就开始变得困难了。
通常的处理方式是不对选项使用标准输入,而是提供另一个选项来指定要使用的文件。
例如,文件 my.options
可能包含 --x 1 --y 2
,您可以 运行 您的程序是以下之一:
prog --opts-file=my_options.json
prog -o my_options.json
这需要额外的间接级别,因为您必须处理从文件中读入的命令行选项 和 选项,但它为 [=14= 留下了标准输入] 打算:-)