红联Linux门户
Linux帮助

linux fmemopen函数打开一个内存流,使用FILE指针进行读写访问

发布时间:2017-03-20 09:28:49来源:linux网站作者:bonelee
fmemopen()函数打开一个内存流,使你可以读取或写入由buf指定的缓冲区。其返回FILE*fp就是打开的内存流,虽然仍使用FILE指针进行访问,但其实并没有底层文件(并没有磁盘上的实际文件,因为打开的内存流fp是在内存中的),所有的I/O都是通过在缓冲区与主存(就是内存)之间来回传送字节来完成的。 
使用第三方库的时候,很可能遇到这样的问题,我们需要处理某个文件,而这个文件不一定是从本地磁盘上读取,可能是分布式文件系统或者其他地方,而第三方库的接口却只提供了一个const char* path参数,意味着只能从磁盘加载,没法直接处理已经加载到内存的数据。
 
这个时候,fmemopen就可以派上用场了,完美的将FILE对象映射到内存上,无需从磁盘上读取了。fmemopen的函数签名很简单,如下:
FILE *fmemopen(void *buf, size_t size, const char *mode);
 
头文件:#include <stdio.h>
 
函数原型: 
linux fmemopen函数打开一个内存流,使用FILE指针进行读写访问
 
参数说明:这个比较明显,就不说了,后面用实例说明即可。
 
这个应用场合较多,比如有些文件不支持内存操作,但是支持文件操作的。
 
代码:
#include <string.h>
#include <stdio.h>
static char buff[] = "Mayuyu is from Japan";
int main(int argc, char **argv)  
{  
int len = strlen(buff);  
FILE *fd = fmemopen(buff, len, "r");  
if(fd == NULL)  
{  
printf("get file error!\n");  
return -1;  
}
char ch;  
while((ch = fgetc(fd)) != EOF)  
printf("%c", ch);  
puts("");
fclose(fd);
return 0;  
}
 
本文永久更新地址:http://www.linuxdiyf.com/linux/29310.html