我在C中编写了一个程序,它有一个处理可以通过文件指针传递给它的文件的函数。
void process_my_file(FILE *fptr, ...) {
/* do work */
}
我想从标准输入中读取一些输入并将其传递给我的函数,而不必将输入写入临时文件。是否可以通过文件指针参数传递它,就像它是一个文件一样,而不必将其写入磁盘?可以通过我可以添加到签名中的其他参数来完成吗?
我是新手,需要一些建议。提前谢谢!
答案 0 :(得分:6)
您可以使用stdin
作为参数调用您的函数。
my_process_file(stdin, ...);
担心这一点的唯一原因是你说'某些输入',但大多数函数都会读取所有文件并停止在EOF上。无论如何,你可以调用你的函数,只要它按照你的要求运行,你就没事了。您可能不应该假设标准输入返回后有任何额外的信息。
请注意,该函数不应依赖于fseek()
等不适用于管道或终端的操作,因为stdin
经常连接到它们。
答案 1 :(得分:0)
您可以使用freopen()函数打开标准输入。
答案 2 :(得分:0)
我可以看到几个选项:
fseek()
向后翻stdin
,以便重新阅读您阅读的文字,然后将stdin
传递给您的函数。当然,如果您想在传递之前更改stdin
的输入,这将无效。此外,您可能无法在交互式文件句柄上fseek()
。如果从文件中重定向stdin
,OS X可以让我逃脱它,但即使你现在可以逃脱它,你也可能不应该这样做。