处理文件或标准输入

时间:2018-10-23 17:37:25

标签: c file stdin

我正在创建一个处理档案的小程序;这样运行:

"./program file.txt".

如果找不到第二个参数,它将从stdin处理

"cat file.txt | ./program"

但是在代码内部……我知道我可以做到:

if (argc==2){
    FILE* archive = argv[1];
    function_1(archive);
    function_2(archive);
    ...
    function_n(archive);
else{
    function_1(stdin);
    function_2(stdin);
    ...
    function_n(stdin);
}

但是反正我可以这样吗?

file* archive;
if (argc==2){
    archive = argv[1];
else{
    archive = stdin;
}
function_1(archive);
function_2(archive);
...
function_n(archive);

因为我想减少编写代码!

2 个答案:

答案 0 :(得分:2)

由于stdin是类型FILE *的变量,因此您可以执行以下操作:

FILE *archive;
if (argc==2){
    archive = fopen(argv[1], "r");
else{
    archive = stdin;
}

答案 1 :(得分:1)

您可以使用三元运算符创建archive

FILE* archive = (argc == 2) ? fopen(args[1], "r") : stdin;

当然,您也必须在最后用支票将其关闭。