Linux下利用sendfile函数传输文件
#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/sendfile.h> int main() { const char *ip="127.0.0.1"; int port=12345; const char *file_name="main.c"; int filefd=open(file_name,O_RDONLY); assert(filefd>0); struct stat stat_buf; fstat(filefd,&stat_buf); struct sockaddr_in address; bzero(&address,sizeof(address)); address.sin_family=AF_INET; inet_pton(AF_INET,ip,&address.sin_addr); address.sin_port=htons(port); int sock=socket(PF_INET,SOCK_STREAM,0); assert(sock>0); int ret=bind(sock,(struct sockaddr *)&address,sizeof(address)); assert(ret!=-1); ret=listen(sock,5); struct sockaddr_in client; socklen_t client_addrlength=sizeof(client); int connfd=accept(sock,(struct sockaddr *)&client,&client_addrlength); if(connfd<0) { printf("Errorno is:%d",errno); } else { sendfile(connfd,filefd,NULL,stat_buf.st_size); close(connfd); } close(sock); return 0; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。