我们调用了一个库来读取文本,这个库 API 只接受一个FILE*
指针。fread()
它实际上通过内部调用读取文件文本。
但是我们还需要使用这个库来读取char*
字符串而不是FILE*
.
当然,我们可以将char*
字符串写入临时文件,但由于某些原因,我们不允许这样做......
怎么做 ?谢谢 !!
查看fmemopen
fmemopen() 函数应将 buf 参数给定的缓冲区与流相关联。
#include <stdio.h>
static char buffer[] = "foobar";
int main (void)
{
FILE *stream;
stream = fmemopen (buffer, strlen (buffer), "r");
/* You got a FILE* pointer, you can call your function here :-) */
}
嗯,没有编写自己的设备驱动程序以某种方式与进程通信,这是一个棘手的问题。我的意思是,你可以创建一个字符设备,当读取它时,它会通过某种 IPC(共享内存、命名管道或其他东西)与进程通信。
但这是 (1) 讨厌的,(2) UNIX 特定的(不可移植的)和 (3) 一个非常糟糕的主意 :-)
如果没有这样的低级技巧(或使用可以像文件句柄一样处理内存的不可移植扩展),这是无法完成的 -fread
期望 aFILE*
并且将从文件句柄中读取,就是这样,真的。
在各种 unix 系统上,您可以创建管道/套接字或类似的文件描述符,并使用 fdopen() 打开文件描述符并获取 FILE* 指针。然后将绳子送入管道/插座。
当你遇到这样的奇怪问题时,我建议你检查你的程序/库设计。奇怪的问题/要求是糟糕设计的强烈迹象。
我不认为这是可以做到的。fread 只能从文件流(即 FILE * 或 stdout)中读取。