EOF重定向文件或从stdin获取输入

时间:2012-08-23 08:07:10

标签: c

我设计了一个带有一些状态转换的解析器。现在我想将一个文件重定向到我在C中创建的解析器中以提供令牌。

我的设计是这样的,我需要在我的字符串末尾有一个空格(''),也就是说,我需要在从文件或标准输入读取的字符串中附加一个空格字符。但问题是索引。 从我需要做的文件重定向

int length=0;

while((c1=getchar())!=EOF)
{
a[length]=c1;
length ++;
}
a[length-1]=' ';
a[length]=EOF;

从stdin读取时,我需要做

int length=0;
while((c1=getchar())!=EOF)
{
a[length]=c1;
length ++;
}
a[length]=' ';
a[length+1]=EOF;

输入既可以来自stdin输入,也可以来自文件重定向(例如./a.out< ac)现在我如何在我的代码中根据输入的类型合并?

1 个答案:

答案 0 :(得分:3)

首先,cat data | ./a.out./a.out < data产生完全相同的效果,即程序的stdin读取文件。

也许你想要的是像./a.out data这样的语法。为此,我建议像这样的循环:

void process_my_data(FILE *);  // main logic here!

int main(int argc, char * argv[])
{
    if (argc == 1)
    {
        process_my_data(stdin);
    }
    else
    {
        while (--argc)
        {
            FILE * f = fopen(argv[argc], "rb");
            process_my_data(f);
            fclose(f);
        }
    }
}