所以我正在用C编写一个简单的Web服务器,现在我想弄清楚如何传输更大的文件。我正试图用一个大约40MB的文件做这件事而且我遇到了一个分段错误(至少那是wget告诉我的!)
问题是,程序本身从来没有给我一个错误,它只是退出,只有当我尝试使用wget获取文件时,wget表示它在seg错误中出错。这是发送文件的代码:
while( 1 ) {
int bytes_read = fread( file_buffer, 1, BUFFER_SIZE, f );
printf( "Bytes read: %d\n", i * 1024 );
if ( bytes_read == 0 ) {
if ( logging > 0 ) {
printf( "End of file reached...\n" );
}
break;
} else {
send( client, file_buffer, strlen( file_buffer ), 0 );
if ( logging > 1 ) {
printf( "Buffer (%d): %s\n\n", bytes_read, file_buffer );
}
}
i++;
}
任何想法出了什么问题?它适用于较小的文件,而不是这个。哦,每次尝试时读取的字节都不同,它从240000到770000不等。想法?谢谢!
答案 0 :(得分:1)
fread不会终止字符串。您需要使用bytes_read作为要发送的length参数,而不是strlen。
您还需要在尝试打印之前对字符串进行空终止,或者使用%s格式化程序提供长度。例如:printf(“Buffer(%d):%。* s \ n \ n”,bytes_read,bytes_read,file_buffer);
答案 1 :(得分:1)
您不应该使用strlen(file_buffer)来指定要发送的字节数;这会在许多情况下中断,并且在发送的文件大于缓冲区时总会中断。为什么不使用bytes_read来指定要发送的字节数?