fmemopen()函数打开一个内存流,使你可以读取或写入由buf指定的缓冲区。其返回FILE*fp就是打开的内存流,虽然仍使用FILE指针进行访问,但其实并没有底层文件(并没有磁盘上的实际文件,因为打开的内存流fp是在内存中的),所有的I/O都是通过在缓冲区与主存(就是内存)之间来回传送字节来完成的。

使用第三方库的时候,很可能遇到这样的问题,我们需要处理某个文件,而这个文件不一定是从本地磁盘上读取,可能是分布式文件系统或者其他地方,而第三方库的接口却只提供了一个File *参数,意味着只能从磁盘加载,没法直接处理已经加载到内存的数据。

这个时候,fmemopen就可以派上用场了,完美的将FILE对象映射到内存上,无需从磁盘上读取了。fmemopen的函数签名很简单,如下:

FILE *fmemopen(void *buf, size_t size, const char *mode);

头文件:#include <stdio.h>

函数原型 : 

参数说明:这个比较明显,就不说了,后面用实例说明即可。

这个应用场合较多,比如有些文件不支持内存操作,但是支持文件操作的。

代码:

  1. #include <string.h>
  2. #include <stdio.h>
  3. static char buff[] = "Mayuyu is from Japan";
  4. int main(int argc, char **argv)
  5. {
  6. int len = strlen(buff);
  7. FILE *fd = fmemopen(buff, len, "r");
  8. if(fd == NULL)
  9. {
  10. printf("get file error!\n");
  11. return -1;
  12. }
  13. char ch;
  14. while((ch = fgetc(fd)) != EOF)
  15. printf("%c", ch);
  16. puts("");
  17. fclose(fd);
  18. return 0;
  19. }

linux编程 fmemopen函数打开一个内存流 使用FILE指针进行读写访问的更多相关文章

  1. php 在linux 用fopen() 函数打开,file_get_contents(),fread()函数 读取 另外一台服务器映射过来的文件 总是返回false,null的情况。

    php 在linux 用fopen() 函数打开,fread()函数 读取  另外一台服务器映射过来的文件 总是返回false,null的情况. #获取平台类型   $type='android';  ...

  2. c++中函数中变量内存分配以及返回指针、引用类型的思考

    众所周知,我们在编程的时候经常会在函数中声明局部变量(包括普通类型的变量.指针.引用等等). 同时,为了满足程序功能的需要,函数的返回值也经常是指针类型或是引用类型,而这返回的指针或是引用也经常指向函 ...

  3. 关于 Delphi 中流的使用(1) 用 TMemoryStream(内存流) 入门 &&& 关于指针的迷惑,我自己问的.

    来自:http://www.cnblogs.com/del/archive/2008/01/01/1022124.html -------------------------------------- ...

  4. [Linux编程] module_param()函数学习笔记

    在读TCP cubic源码中,遇到了module_param(),网上查到的资料如下: 在用户态下编程可以通过main()来传递命令行参数,而编写一个内核模块则可通过module_param()来传递 ...

  5. Linux编程 ---- dup函数

    dup,dup2,dup3函数       顾名思义,dup及duplicate的简写,也就是复制的意思.而事实上这几个函数的功能也确实是复制文件描述符.那为什么要复制文件描述符呢?呵呵,我认为是程序 ...

  6. 标准I/O库之打开和关闭流

    下列三个函数打开一个标准I/O流. #include <stdio.h> FILE *fopen( const char *restrict pathname, const char *r ...

  7. 从零开始学C++之IO流类库(二):文件流(fstream, ifstream, ofstream)的打开关闭、流状态

    一.文件流 ofstream,由ostream派生而来,用于写文件 ifstream,由istream派生而来, 用于读文件 fstream,由iostream派生而来,用于读写文件 二.打开文件 说 ...

  8. 文件流(fstream, ifstream, ofstream)的打开关闭、流状态

    一.文件流 ofstream,由ostream派生而来,用于写文件 ifstream,由istream派生而来, 用于读文件 fstream,由iostream派生而来,用于读写文件 二.打开文件 说 ...

  9. C#内存流示例----->用内存流来读取图片

    背景:一个窗体.一个pictureBox.一个lable[没有选择图片,lable的text为"图片未选择"],在pictureBox1的Click事件中添加如下代码: priva ...

随机推荐

  1. 如何查看项目的Laravel框架的版本

    如何查看项目的Laravel框架的版本 接触到一个已有的使用Laravel框架的项目时, 打开项目根目录下的composer.json文件, 找到 laravel/framework 的值,即可查看版 ...

  2. spring-boot-nginx代理-docker-compose部署

    在本地测试,使用docker部署不用在意环境 java测试项目: web框架:spring boot 框架 项目管理:maven 数据库:redis + postgres + mongo 部署相关:n ...

  3. Delphi中Indy 10的安装和老版本的卸载

    http://www.cnblogs.com/railgunman/archive/2010/08/31/1814112.html Indy 10的安装和老版本的卸载 Indy 10下载地址: htt ...

  4. 前端跨域调请求 nginx反向代理

    用 本地pc的目录,请求192.168.3.246的接口,以/api为标识 运行命令: 启动 nginx -s start 重启 nginx -s relaod 停止 nginx -s stop 查看 ...

  5. codevs——1507 酒厂选址

    1507 酒厂选址  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description Abstinence(戒酒) ...

  6. 注解@RequestMapping value 用法

    本文引自:https://blog.csdn.net/qq_33811662/article/details/80864784 RequestMapping是一个用来处理请求地址映射的注解,可用于类. ...

  7. Ubuntu 16.04下在Shell终端下使用nautilus快速打开窗口文件夹

    Ubunut 16.04默认使用nautilus进行管理资源文件夹,nautilus默认是支持参数传递的. 使用: nautilus /dirurl 打开当前文件夹(可以使用$PWD代替): naut ...

  8. Vim出现:_arguments:450: _vim_files: function definition file not found的问题解决

    安装了zsh之后使用vim出现如下错误: arguments:450: _vim_files: function definition file not found _arguments:450: _ ...

  9. memcache的学习路线图

     memcache学习材料 //memcache自带的github 上的 wiki     //席剑飞 Memcache(MC)系列 1~8系列 评注: memcache系统写的最深的一博客,建议一读 ...

  10. VBA 把电信的电话费用表转换成部门电话费用明细表(图文)

    今天同事要做一个这种工作.就是把电信发来的费用表,转换成按部门划分的电话费用表,100多部电话,假设一个个去核对,真还是须要些时间的.问题来了,有更好的方法么,我们来看一下. 电信公司给的费用明细是这 ...