2012-02-11 38 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); 
} 
相關問題