通过socket的sendfile向pvfs的挂载client端写文件
来源:互联网 发布:淘宝tm商标可以吗 编辑:程序博客网 时间:2024/06/14 07:35
(1) node15,node16为data server,node14为client端,在node14上安装了pvfs的内核模块,启动了pvfs2-client、pvfs2-client-core,将tcp://node15:3334/pvfs2-fs挂载到/mnt/pvfs2
(2) server.c (以node14为socket的server端,接收文件,并写入/mnt/pvfs2/中)
[root@node14 socket]# cat server.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<sys/stat.h>#include<fcntl.h>#include<time.h>#include<errno.h>#define oops(msg) { perror(msg); exit(errno); }int main(){ int sd = socket(PF_INET, SOCK_STREAM, 0); if(sd == -1) oops("socket"); struct sockaddr_in address; bzero((void *)&address, sizeof(address)); address.sin_family = AF_INET; address.sin_addr.s_addr = inet_addr("192.168.100.123"); address.sin_port = 8888; int bind_return = bind(sd, (struct sockaddr *)&address, sizeof(address)); if(bind_return == -1) oops("bind"); int listen_return = listen(sd, 1); if(listen_return == -1) oops("listen"); while(1){ int client_fd = accept(sd, NULL, NULL); if(client_fd == -1) oops("accept"); time_t current_time = time(NULL); char fileName[50]; sprintf(fileName, "/mnt/pvfs2/%x", current_time); int fd = open(fileName, O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR); if(fd == -1) oops("open"); char buff[1024]; ssize_t length; while((length = recv(client_fd, buff, sizeof(buff), 0)) > 0){ write(fd, buff, length); } close(fd); } return EXIT_SUCCESS;}(3) client.c (在任何一台linux机器上,作为socket的client端,向node14发文件)
[root@node15 socket]# cat client.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<sys/types.h>#include<sys/socket.h>#include<sys/sendfile.h>#include<netinet/in.h>#include<arpa/inet.h>#include<sys/stat.h>#include<fcntl.h>#include<errno.h>#define oops(msg) { perror(msg); exit(errno); }int main(int argc, char *argv[]){ if(argc != 2)oops("which file not specified?"); int sd = socket(PF_INET, SOCK_STREAM, 0); if(sd == -1) oops("socket"); struct sockaddr_in address; bzero(&address, sizeof(address)); address.sin_family = AF_INET; address.sin_addr.s_addr = inet_addr("192.168.100.123"); address.sin_port = 8888; int connect_ret = connect(sd, (struct sockaddr*)&address, sizeof(address)); if(connect_ret == -1) oops("connect"); int fd = open(argv[1], O_RDONLY); off_t offset = 0; struct stat fileStatus; int fstat_ret = fstat(fd, &fileStatus); if(fstat_ret == -1)oops("fstat"); ssize_t length = sendfile(sd, fd, &offset, fileStatus.st_size); if(length == -1) {oops("sendfile");} else fprintf(stdout, "%ld characters have been send to server.", length); close(fd); close(sd); return EXIT_SUCCESS;}(4) 结果显示:
大文件被分块写入到node15、node16的/pvfs2-storage-space/中。
- 通过socket的sendfile向pvfs的挂载client端写文件
- 通过调用标准库函数向pvfs的client挂载端写文件
- 通过Socket通过Client向Server使用sendfile传文件
- 向PVFS工程中添加新文件
- Socket Client端的思路
- pvfs提高性能的方法
- pvfs中src/client/sysin/sys-get-eattr.sm与对应的src/client/sysin/sys-get-eattr.c
- 通过VB写的ACTIVEX向本地文件中写数据
- 适合新手的网络编程,用socket传文件(本例传的是jpg图片) 用到sendfile函数
- 向文件中写数据的方法
- Android Java端的Socket.io-client
- Apache 的 X-sendfile
- Linux 的 sendfile
- Linux Sendfile 的优势
- linux的sendfile
- 基于PVFS的并行网络存储系统
- 基于PVFS的并行网络存储系统
- PVFS并行虚拟文件系统的优缺点介绍
- oracle归档日志管理
- Win7 配置Android开发环境
- 每个程序员都应理解的7种坏味道,11种原则,23种模式
- 在第一次使用CSS基本上优化,使用jQuery:效果、回调、教程
- atl 标准控件在用多线程发消息时VC可以接收但网页无法接收的问题
- 通过socket的sendfile向pvfs的挂载client端写文件
- 模拟纸牌发送采用不重复的随机数,多线程操作管道流
- top 和order by导致查询结果不一致的问题
- 【wireshark】wireshark 出现There are no interfaces on which a capture can be done.的解决方法
- kernel和initrd
- 61条面向对象设计的经验
- js方法参数的默认值
- C++中函数指针用法示例
- Python:新浪微博应用开发简介(认证及授权部分)