fopencookie函式詳解
今天看DPDK時,看到了fopencookie函式,以前基本沒有用過該函式,乘此機會好好看看如何使用。
1. 函式標頭檔案與函式原型
函式標頭檔案: #include <stdio.h>
函式原型:
FILE *fopencookie(void *cookie, const char *mode, cookie_io_functions_t io_funcs);
2. 函式及引數說明
該函式用來DIY一個流,什麼是流,比如標準輸入,標準輸出。
引數:
(1 cookie
cookie是一種自定義的資料結構,用於和後面的io_funcs配合使用,可以為NULL。
(2 mode
開啟方式,和fopen相同,包括:r,w,a,r+,w+,a+。
(3 io_funcs
四個函式指標組成的函式集,需要使用者實現這四個函式指標。我們仔細看看:
io_funcs:
typedef struct {cookie_read_function_t *read;
cookie_write_function_t *write;
cookie_seek_function_t *seek;
cookie_close_function_t *close;
} cookie_io_functions_t;
第一個read函式實現從流的讀操作,原型如下:
ssize_t read(void *cookie, char *buf, size_t size);
該函式必須返回讀到資料的位元組數,注意是讀到,意味著流資料要拷貝到
buf中。返回0表示EOF,-1表示出錯。該函式必須要更新流的offset。
第二個函式write實現向流的寫操作,原型如下:
ssize_t write(void *cookie, const char *buf, size_t size);
基本和上面read類似。
第三個函式seek實現挪動流的offset,原型如下:
int seek(void *cookie, off64_t *offset, int whence);
offset更具whence的取值指明瞭流指標要移動到的位置。基本和系統呼叫的seek函式類似。
返回0表示成功,返回-1表示失敗。
第四個函式close用於關閉流,該函式用來釋放流所用到的緩衝區資源。
相關文章
- 尤拉函式詳解函式
- malloc函式詳解函式
- kill() 函式詳解函式
- ioctl()函式詳解函式
- gluLookAt 函式詳解函式
- 詳解Java函式式介面Java函式
- Socket send函式和recv函式詳解函式
- 建構函式詳解函式
- 函式引數詳解函式
- mysql常用函式詳解MySql函式
- 箭頭函式詳解函式
- fcntl函式用法詳解函式
- JavaScript函式模式詳解JavaScript函式模式
- eval()函式用法詳解函式
- Oracle 聚合函式詳解Oracle函式
- wait()函式詳解AI函式
- 詳解JavaScript函式模式JavaScript函式模式
- oracle TRANSLATE函式詳解Oracle函式
- select 函式詳解函式
- xslt函式詳解函式
- Oracle 分析函式詳解Oracle函式
- PHP函式處理函式例項詳解PHP函式
- Oracle分析函式之開窗函式over()詳解Oracle函式
- ORALCE函式:LAG()和LEAD() 分析函式詳解函式
- python socket函式詳解Python函式
- TypeScript中的函式詳解TypeScript函式
- 箭頭函式this指向詳解函式
- Java建構函式詳解Java函式
- vimscript-expand函式詳解函式
- Oracle單行函式詳解Oracle函式
- setdefaultencoding函式使用詳解Encoding函式
- 詳解C語言函式C語言函式
- PHP BC Math 函式詳解PHP函式
- getpid()函式用法詳解函式
- ORACLE to_char函式詳解Oracle函式
- oracle over函式 詳解(轉)Oracle函式
- PL/SQL單行函式和組函式詳解(轉)SQL函式
- SetupDiGetClassDevs函式詳解dev函式