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!\n");  
  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. }  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM