圖示模型:
主要步驟:
代碼:
使用兩個FIFO實現客戶服務器模型:
client:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <fcntl.h>
int main(int argc,char* argv[]){
mkfifo("/tmp/cs",0644);
mkfifo("/tmp/cs1",0644);
int fifofd = open("/tmp/cs",O_WRONLY);
char buf[BUFSIZ];
write(fifofd,argv[1],strlen(argv[1])+1);
printf("%d write file:%s\n",getpid(),argv[1]);
//sleep(1);
int fifofd1 = open("/tmp/cs1",O_RDONLY);
read(fifofd1,buf,BUFSIZ);
printf("%d client read:\n%s",getpid(),buf);
}
server:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <fcntl.h>
int main(int argc,char* argv[]){
mkfifo("/tmp/cs",0644);
int fifofd = open("/tmp/cs",O_RDONLY);
char buf[BUFSIZ];
read(fifofd,buf,BUFSIZ);
printf("%d file path:%s\n",getpid(),buf);
int fd = open(buf,O_RDONLY);
bzero(buf,BUFSIZ);
read(fd,buf,BUFSIZ);
mkfifo("/tmp/cs1",0644);
int fifofd1= open("/tmp/cs1",O_WRONLY);
write(fifofd1,buf,BUFSIZ);
close(fifofd);
close(fifofd1);
}
使用單個命名管道實現客戶服務器模型:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <fcntl.h>
int main(int argc,char* argv[]){
mkfifo("/tmp/cs",0644);
int fifofd = open("/tmp/cs",O_RDWR);
char buf[BUFSIZ];
if(fork()){// parent
write(fifofd,argv[1],strlen(argv[1])+1);
printf("write file:%s\n",argv[1]);
sleep(1);
read(fifofd,buf,BUFSIZ);
printf("client read:\n%s",buf);
}else{// child
read(fifofd,buf,BUFSIZ);
printf("file path:%s\n",buf);
int fd = open(buf,O_RDONLY);
bzero(buf,BUFSIZ);
read(fd,buf,BUFSIZ);
write(fifofd,buf,BUFSIZ);
}
close(fifofd);
unlink("/tmp/cs");
}
使用套接字實現客戶服務器模型:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <fcntl.h>
int main(int argc,char* argv[]){
int sv[2];
char buf[BUFSIZ];
socketpair(AF_LOCAL,SOCK_STREAM,0,sv);
if(fork()){// parent
close(sv[0]);
write(sv[1],argv[1],strlen(argv[1])+1);
read(sv[1],buf,BUFSIZ);
printf("client read:\n%s",buf);
}else{// child
close(sv[1]);
read(sv[0],buf,BUFSIZ);
printf("file path:%s\n",buf);
int fd = open(buf,O_RDONLY);
bzero(buf,BUFSIZ);
read(fd,buf,BUFSIZ);
write(sv[0],buf,BUFSIZ);
}
}