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>

函数原型 : 

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

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

代码:

[cpp] view plaincopy
  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. }

转载于:https://www.cnblogs.com/bonelee/p/6568011.html

linux编程 fmemopen函数打开一个内存流 使用FILE指针进行读写访问相关推荐

  1. python通过内置的什么函数打开一个文件_利用python进行文件操作

    这篇文章主要介绍了如何利用python进行文件操作,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下 什么是文件 文件是系统存储区域的一个命名位置,用来存储一些信息,便于后续访问.能够在非 ...

  2. linux 已打开文件图标管理,Linux_没有启动图标利用Linux命令在终端打开文件,  在Linux系统中,打开一个 - phpStudy...

    没有启动图标利用Linux命令在终端打开文件 在Linux系统中,打开一个文件很简单,只要有启动图标就可以了,但是如果没有启动图标的话要如何在终端下打开文件呢?使用命令就能很好的解决这个问题,下面小编 ...

  3. 【Java基础】Java IO编程:输入输出流、内存流、打印流、缓冲流BufferedReader、扫描流Scanner、序列化与反序列化

    文章目录 第11章.Java IO编程 11.1 文件操作类:File 11.2 字节流与字符流 字节输出流:OutputStream OutputStream类 FileOutputStream类 ...

  4. linux 编程--prctl()函数应用

    int prctl ( int option,unsigned long arg2,unsigned long arg3,unsigned long arg4,unsigned long arg5 ) ...

  5. linux编程-open函数和write函数实现copy命令

    文章目录 文件描述符 文件描述符 ​ 所有的I/O操作的系统调用都以文件描述符,一个非负整数(通常是小整数),来指代打开的文件. open函数打开pathname所标识的文件,并返回文件描述文件描述符 ...

  6. matlab中screen函数,14 用 Screen 函数打开一个窗口

    从今天开始,我打算边解释 PTB 自带的 demo 程序,边讲解一些涉及到的知识点,这样进度会快一点. PTB 的 demo 可以在 Psychtoolbox Demos 网站上获取.另外,在安装目录 ...

  7. 关于Linux下C语言编程execvp函数的一个问题

    在实现linux管道命令的shell程序的时候,在主函数里面创建了两个子进程,l都调用了execvp函数来执行命令,但是很奇怪的是,当命令可以执行的时候,程序正常执行,子进程也是每次都正常退出,但是如 ...

  8. linux 启动tomcat 怎么显示日志文件,随着LINUX的启动,打开一个终端显示TOMCAT的日志文件,请问如何做到?...

    FC7下已配置好TOMCAT 5能自动随系统的启动而启动! 我在FC7系统启动完成后自动弹出一个终端,并其中执行命令tail -f rootDownloadjakarta5.0.28logscatal ...

  9. Linux编程signal函数使用

    题目: 编写一段程序,使用系统调用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill( )向 ...

最新文章

  1. Tech ED的课程和动手实验营讲义已经发布,需要的赶紧去下载
  2. Webstorm常用快捷键备忘(Webstorm入门指南)
  3. 在Windows上运行-XX:CompileCommand
  4. nginx 直接在配置文章中设置日志分割
  5. GY歌谣之读懂每行代码(飞智)
  6. 用 Python 分析网易严选 Bra 销售信息,告诉你她们真实的 Size
  7. kafka性能高的影响因素
  8. DVWA high暴力破解
  9. 无人驾驶全局路径规划之RRT算法
  10. Cuda驱动安装/更新
  11. 安装软件,python安装,node.js安装,pycharm安装,vscode安装,PR, PS, LR.AE Windows开关机等,雪崩的时候没有一片雪花儿是无辜的
  12. 如何利用Python编程批量处理Excel来提高日常工作效率!
  13. Java 设置系统参数和运行参数
  14. 塞尔达传说-荒野之息 体验复盘
  15. UE4 安卓手机launch报错
  16. 历数马化腾早年的赚钱经历。
  17. JavaScript高级(三)
  18. 真正会赚钱的人,都有什么样的思维?
  19. 21天学会Java之(Java SE第十三篇):网络编程、TCP/UDP通信
  20. C语言魔塔视频百度云,原创 C语言版魔塔

热门文章

  1. ajax回调函数ifelse,实现AJAX及用Promise解决回调函数命名问题
  2. linux yum 安装mysql_Linux下使用yum安装MySQL
  3. iphone日历怎么跳转日期_晚上别调手表日期!手表调节日历的禁区!
  4. vscode 默认初始化_VSCode设置初始化模板
  5. 感觉 asp.net mvc开发好难啊_青岛开发区晟创广告公司
  6. iphone彻底删除照片如何恢复_如何把删除的照片恢复?轻松解决恢复问题!
  7. mysql phpwind_【phpwind教程:Linux Apache php MySQL GD PHPWind 集成环境配置】-phpwind教程-【零度中国】...
  8. hyfsoft java_Java自动化测试框架-04 - 来给你的测试报告化个妆整个形 - (上)(详细教程)...
  9. java文件服务器开源,附架构师必备技术详解
  10. 【编译原理】关于NFA和DFA-集合定义的探索