将二进制文件逐块读取到 C 中的内存缓冲区中
Read binary file chunk by chunk into memory buffer in C
我必须在我的网络服务器中读取一个二进制文件并通过 TCP 将其发送到客户端。我决定分块阅读。我该怎么做?
我的 fgets 代码仅适用于文本文件(省略了检查 return 值的代码):
char buf[2048];
fgets(buf, sizeof(buf), fp);
while (!feof(fp))
{
Server_TCP_Send(socket, buf, strlen(buf));
fgets(buf, sizeof(buf), fp);
}
fclose(fp);
使用fread()
代替fgets()
,注意return值:
char buf[2048];
size_t buflen;
while (1) {
buflen = fread(buf, 1, sizeof(buf), fp);
if (buflen < 1) {
if (!feof(fp)) {
// a read error occured...
}
break;
}
Server_TCP_Send(socket, buf, buflen);
}
fclose(fp);
或者,某些平台具有通过套接字发送文件的功能。例如,sendfile()
on Linux, or TransmitFile()
在 Windows.
我必须在我的网络服务器中读取一个二进制文件并通过 TCP 将其发送到客户端。我决定分块阅读。我该怎么做?
我的 fgets 代码仅适用于文本文件(省略了检查 return 值的代码):
char buf[2048];
fgets(buf, sizeof(buf), fp);
while (!feof(fp))
{
Server_TCP_Send(socket, buf, strlen(buf));
fgets(buf, sizeof(buf), fp);
}
fclose(fp);
使用fread()
代替fgets()
,注意return值:
char buf[2048];
size_t buflen;
while (1) {
buflen = fread(buf, 1, sizeof(buf), fp);
if (buflen < 1) {
if (!feof(fp)) {
// a read error occured...
}
break;
}
Server_TCP_Send(socket, buf, buflen);
}
fclose(fp);
或者,某些平台具有通过套接字发送文件的功能。例如,sendfile()
on Linux, or TransmitFile()
在 Windows.