【发布时间】:2012-02-21 20:54:55
【问题描述】:
所以我正在用 C 语言编写一个简单的 Web 服务器,现在我正在尝试弄清楚如何传输更大的文件。我现在正在尝试使用 ~40MB 的文件来执行此操作,但遇到了分段错误(至少 wget 是这样告诉我的!)
问题是,程序本身实际上从来没有给我一个错误,它只是退出,只有当我尝试使用 wget 获取文件时,wget 才说它在段错误中出错。这是发送文件的代码:
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 不等。想法?谢谢!
【问题讨论】:
-
好吧,首先,您不能在二进制流上使用 strlen ——它将在第一个 0 字节处停止。您在发送调用中没有使用 bytes_read 是否有原因?