我有一个未知大小的文本文件,必须通过套接字从我的服务器发送到客户端的某个(可变大小)的块。
我如何使用Fread执行该任务?我读了很多关于Fread的内容,但我正在使用指针的那种Struggeling我应该在我的案例中传递这个功能?
size_t fread(void * ptr,size_t size,size_t count,FILE * stream);
答案 0 :(得分:0)
我如何使用fread完成该任务?
只需继续从服务器向客户端发送(固定大小)的块,直到服务器没有其他任何内容发送。
在我的情况下,我应该通过哪种指针?
任何。
检查fread()
的示例,buffer
中传递的fread()
类型为char
,而fread()
只允许它,因为该函数的第一个参数是:
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
因此,只需传递用于将数据(块)存储到函数中的数组。
答案 1 :(得分:0)
要将文件读取为块并将其发送到套接字,您必须确定块的大小。
例如:4096
是完美的大小,不会太大也不会太小!
我们选择4096
个字节作为块大小。顺便说一句可定制。
从文件接收到数据后,将块数据发送给客户端。
#include <stdio.h>
int main(ssize_t argc, char** argv)
{
// We're going to use "rb" because in (WINDOWS) you need it!
FILE* fp = fopen(argv[1], "rb");
char byte_buffer[4096];
size_t bytes_read = 0;
while(( bytes_read = fread(&byte_buffer, 4096, 1, fp) )> 0)
send_data_chunk_to_client_somehow(/* your parameters here */);
}
文本文件应分块读取,然后发送给客户端。
fread(3)
―二进制流I / O
fread(3)
与文本流和二进制流兼容,它是 ANSI C 的一部分。 POSIXread(3)
与该功能等效,并且比它快。size_t fread(void* ptr, size_t size, size_t nmemb, FILE* fp);