发送方和接收方的套接字读/写文件大小变化

时间:2012-02-11 01:31:27

标签: sockets unix network-programming network-protocols

我想以相同大小的块发送数据。 但如果文件大小不是chuck大小的倍数,那么将增加额外的 接收器侧的尺寸。 我想到了解决方案获取文件大小并根据文件大小划分块。 但是,这个解决方案无法正常工作,任何人都可以告诉我

这是我的代码

total_chunks = size / CHUNK_SIZE;
partial_chunks = size % CHUNK_SIZE;
int write_fd = open("test3.txt",O_CREAT|O_WRONLY,0777);
if(fd != -1)
{
    if(total_chunks >= 1)
    {
        data_chunk = (char *)malloc(sizeof(char) * CHUNK_SIZE);
        bzero((char *) data_chunk, sizeof(data_chunk));
        for(iteration = 0;iteration <total_chunks;iteration++)
        {
            read(fd,data_chunk,sizeof(data_chunk));
            write(write_fd,data_chunk,CHUNK_SIZE);
        }
        free(data_chunk);
    }
    if(partial_chunks != 0)
    {
        data_chunk = (char *)malloc(sizeof(char) * partial_chunks);
        bzero((char *) data_chunk, sizeof(data_chunk));
        read(fd,data_chunk,sizeof(data_chunk));
        write(write_fd,data_chunk,sizeof(data_chunk));
    }
    close(fd);
    close(write_fd);
}

1 个答案:

答案 0 :(得分:0)

sizeof(data_chunk)将为您提供data_chunk数据类型的大小,它与sizeof(char *)相同。没有函数可以为你提供malloc分配的内存块的大小,只需用CHUNK_SIZE代替完整的块和下面的partial_chunks,即:

total_chunks = size / CHUNK_SIZE;
partial_chunks = size % CHUNK_SIZE;
int write_fd = open("test3.txt",O_CREAT|O_WRONLY,0777);
if(fd != -1)
{
    if(total_chunks >= 1)
    {
        data_chunk = (char *)malloc(sizeof(char) * CHUNK_SIZE);
        for(iteration = 0;iteration <total_chunks;iteration++)
        {
            read(fd,data_chunk,CHUNK_SIZE);
            write(write_fd,data_chunk,CHUNK_SIZE);
        }
        free(data_chunk);
    }
    if(partial_chunks != 0)
    {
        data_chunk = (char *)malloc(sizeof(char) * partial_chunks);
        read(fd,data_chunk,partial_chunks);
        write(write_fd,data_chunk,partial_chunks);
    }
    close(fd);
    close(write_fd);
}