【发布时间】:2013-12-12 16:53:27
【问题描述】:
使用 sendfile 发送文件很简单:
stat(fd,&filestat);
sendfile(sockfd,fd,0,filestat.len)
但是如何使用 sendfile 接收文件?因为不知道文件的长度,是不是要先发文件长度?
sendfile(fd, sockfd,0, ??)
似乎有两种方法可以做到这一点:
-
先发送文件stat.len
//send end write(sockfd,filestat.len); sendfile(sockfd,fd,&offset,filestat.len); //receive end read(sockfd,&len); sendfile(fd,sockfd,&offset,len) -
在接收端使用循环:
//receive end while(sendfile(fd,sockfd,&offset,BUF_LEN) > 0) { offset += BUF_LEN; }
哪个更好?我应该专门处理缓冲区长度吗? 第一种方式文件很大的时候有问题吗?
(我很喜欢mac os版本的sendfile,count为0时会一直发送到文件末尾)
【问题讨论】:
-
为什么不使用具有指定数据长度机制的现有协议,而不是自己编写?
-
@Ignacio Vazquez-Abrams 你指的是哪个协议?