使用 fread 追加到缓冲区
Append to a buffer using fread
如何将数据附加到缓冲区:
我有缓冲区:
uint8_t* buff = malloc((uint8_t*)malloc(BLOCK+1);
现在我想使用 fread 读取它:(我假设长度 < BLOCK)
fread(buff, 1, length, file)
第二次fread
我想将数据附加到缓冲区
fread(buff + length, 1, length, file)
会修改我的起始指针吗?
我需要保存起始指针吗?我还有哪些其他选择?
您的第一次阅读可能是:
size_t nbytes = fread(buff, 1, length, file);
您的第二次阅读可能是:
size_t xbytes = fread(buff + nbytes, 1, min(length, BLOCK + 1 - nbytes));
(其中 min()
可能是:static inline size_t min(size_t x, size_t y) { return (x < y) ? x : y; }
,当然)。
起始偏移量是上一次读取结束的位置;要读取的长度要么是 length
,要么是剩下的 space——以较小者为准。
完成后,数据的总字节数为nbytes + xbytes
。您应该检查零,这意味着读取失败。
如何将数据附加到缓冲区:
我有缓冲区:
uint8_t* buff = malloc((uint8_t*)malloc(BLOCK+1);
现在我想使用 fread 读取它:(我假设长度 < BLOCK)
fread(buff, 1, length, file)
第二次fread
我想将数据附加到缓冲区
fread(buff + length, 1, length, file)
会修改我的起始指针吗?
我需要保存起始指针吗?我还有哪些其他选择?
您的第一次阅读可能是:
size_t nbytes = fread(buff, 1, length, file);
您的第二次阅读可能是:
size_t xbytes = fread(buff + nbytes, 1, min(length, BLOCK + 1 - nbytes));
(其中 min()
可能是:static inline size_t min(size_t x, size_t y) { return (x < y) ? x : y; }
,当然)。
起始偏移量是上一次读取结束的位置;要读取的长度要么是 length
,要么是剩下的 space——以较小者为准。
完成后,数据的总字节数为nbytes + xbytes
。您应该检查零,这意味着读取失败。