Изменение размера файла чтения / записи сокета у отправителя и получателя - PullRequest
0 голосов
/ 11 февраля 2012

Я хочу отправить данные в виде кусков одинакового размера.но если размер файла не кратен размеру патрона, то на стороне получателя будет добавлен дополнительный размер.Я подумал о решении получить размер файла и разделить его на размер файла.Однако это решение не работает, может anyboby сказать мне

Вот мой код

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 голосов
/ 12 февраля 2012

sizeof (data_chunk) даст вам размер типа данных data_chunk, он такой же, как sizeof (char *). Не существует функции, которая выдаст вам размер блока памяти, выделенного malloc, просто замените его на CHUNK_SIZE вместо полных блоков и частичных_чанков ниже, т. Е.:

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);
}
...