假设我正在使用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从服务器存储文件。 我怎么做?我很乐意得到一些建议。
提前致谢
答案 0 :(得分:1)
您无法使用mmap
从套接字接收文件。 mmap
用于将文件(或匿名内存)映射到流程虚拟地址空间。引用手册页
mmap()在虚拟地址空间中创建一个新映射 呼叫过程。
所以你必须使用“套接字调用”来接收客户端的文件。
不确定为什么要这样做,这是一种使用mmap写入客户端文件的方法。首先,您必须使用fopen()
。然后,您可以使用lseek
“放大”文件:
lseek()函数允许将文件偏移量设置为超出 文件的结尾(但这不会改变文件的大小)。如果 稍后写入数据,后续 间隙中的数据的空闲读取(“空洞”)返回空字节('\ 0'),直到数据实际写入间隙。
最后,您可以对其进行mmap并复制通过网络收到的内容。