C将分割文本文件转换为块

时间:2017-10-10 14:37:25

标签: c string pointers void fread

我有一个未知大小的文本文件,必须通过套接字从我的服务器发送到客户端的某个(可变大小)的块。

我如何使用Fread执行该任务?我读了很多关于Fread的内容,但我正在使用指针的那种Struggeling我应该在我的案例中传递这个功能?

size_t fread(void * ptr,size_t size,size_t count,FILE * stream);

2 个答案:

答案 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 的一部分。 POSIX read(3)与该功能等效,并且比它快。

size_t fread(void* ptr, size_t size, size_t nmemb, FILE* fp);