我在 C 中有一种情况,我想在调用 fopen 时调用 c 函数。这意味着我想拥有某种“虚拟文件”。当我在这个“虚拟文件”上使用 fopen 时,我想调用一个函数来生成文件中的数据。
这可能吗?
谢谢!
没有直接的方法来调用函数来产生输出。但是,您可以使用 调用另一个进程popen()
,这可能足以满足您的需要。
在不可能的标准C中,AFAIK,
如果您使用带有 GNU Glibc的系统(例如 GNU/Linux),您可以拥有自定义流,尤其是 thru fopencookie
。
请注意,标准 C++ 库还提供(它自己的变体)流,您可以拥有自己的。
在 GNU/Linux 上,内核还允许您使用FUSE在用户空间中提供文件系统
这意味着我想拥有某种“虚拟文件”。当我在这个“虚拟文件”上使用 fopen 时,我想调用一个函数来生成文件中的数据。
为此,您需要编写自己的文件系统。幸运的是,其他人已经完成了困难的部分:看看FUSE。例如,您可以编写一个文件系统,其中“文件”实际上是 RSS 提要。然后,您可以使用标准文件调用从这些提要中读取数据。
现在,您是否应该采用这种方法是一个不同的问题。如果您可以控制读取文件的代码,那么让它调用适当的数据提供函数可能比需要安装自定义文件系统更容易。