使用mmap从服务器接收文件

时间:2014-03-18 11:42:03

标签: c sockets networking mmap

假设我正在使用read& amp;将文件从服务器发送到客户端。发送系统调用。 现在,我想使用mmap系统调用在客户端接收数据。我该怎么做?

给出以下send_file函数(服务器端): (sd是与客户端关联的套接字描述符)

int send_file (int sd, const char* file_name) {

int fd;
char buf[1024];
if ( (fd =get_fd(file_name)) > 0) {

    while (read(fd, buf, sizeof buf) > 0) {

        if (send(sd, buf, sizeof buf, 0) < 0) {
            perror("send");
            return -1;
        }

    }

    close(fd);
    return 0;

}

return -1;

}

同样,我想在客户端创建文件,然后使用MMAP从服务器存储文件。 我怎么做?我很乐意得到一些建议。

提前致谢

1 个答案:

答案 0 :(得分:1)

您无法使用mmap从套接字接收文件。 mmap用于将文件(或匿名内存)映射到流程虚拟地址空间。引用手册页

  

mmap()在虚拟地址空间中创建一个新映射   呼叫过程。

所以你必须使用“套接字调用”来接收客户端的文件。

不确定为什么要这样做,这是一种使用mmap写入客户端文件的方法。首先,您必须使用fopen()。然后,您可以使用lseek“放大”文件:

  

lseek()函数允许将文件偏移量设置为超出   文件的结尾(但这不会改变文件的大小)。如果   稍后写入数据,后续          间隙中的数据的空闲读取(“空洞”)返回空字节('\ 0'),直到数据实际写入间隙。

最后,您可以对其进行mmap并复制通过网络收到的内容。