zoukankan      html  css  js  c++  java
  • linux编程 fmemopen函数打开一个内存流 使用FILE指针进行读写访问

    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 plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. #include <string.h>  
    2. #include <stdio.h>  
    3.   
    4. static char buff[] = "Mayuyu is from Japan";  
    5.   
    6. int main(int argc, char **argv)  
    7. {  
    8.     int len = strlen(buff);  
    9.     FILE *fd = fmemopen(buff, len, "r");  
    10.     if(fd == NULL)  
    11.     {  
    12.         printf("get file error! ");  
    13.         return -1;  
    14.     }  
    15.   
    16.     char ch;  
    17.     while((ch = fgetc(fd)) != EOF)  
    18.         printf("%c", ch);  
    19.     puts("");  
    20.   
    21.     fclose(fd);  
    22.   
    23.     return 0;  
    24. }  
  • 相关阅读:
    vue计算属性和方法的区别
    函数防抖和函数节流
    vue项目使用keep-alive
    hash模式与history模式
    Vue中的计算属性
    MVVM的理解和Vue的生命周期
    session和cookie的区别
    localStorage和sessionStorage区别
    try catch finally的理解
    《Linux命令学习手册》系列分享专栏
  • 原文地址:https://www.cnblogs.com/bonelee/p/6568011.html
Copyright © 2011-2022 走看看