当前位置:  开发笔记 > 运维 > 正文

将块中的二进制文件块读入C中的内存缓冲区

如何解决《将块中的二进制文件块读入C中的内存缓冲区》经验,为你挑选了1个好方法。

我必须在我的网络服务器中读取二进制文件并通过TCP将其发送到客户端.我决定用大块阅读它.我该怎么做?

我的fgets代码只适用于文本文件(代码,省略了检查返回值):

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);

Remy Lebeau.. 6

使用fread()而不是fgets(),并注意返回值:

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()在Linux或TransmitFile()Windows上.



1> Remy Lebeau..:

使用fread()而不是fgets(),并注意返回值:

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()在Linux或TransmitFile()Windows上.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有