2012-02-11 51 views
0

我想以相同大小的块发送数据。 但是如果文件大小不是卡盘大小的倍数,那么在接收机端将会增加额外的大小 。 我想到解决方案获取文件大小,并将块分割为文件大小。 然而,这种解决方案是不工作可以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); 
} 

回答

0

的sizeof(data_chunk)会给你data_chunk的数据类型的大小,这是一样的sizeof(字符*) 。没有函数会给你一个由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); 
} 
相关问题