您的位置:首页 > 其它

利用FIFO编写一个Server/Client程序

2006-11-15 11:53 731 查看
利用FIFO编写一个Server/Client程序,在客户端输入一个文件名,通过管道把文件名提交给服务器,服务器接受请求若文件存在则返回相应文件内容,否则返回相应错误信息。

[align=left]/*file:fifo_cs.h*/[/align]
[align=left]#ifndef FIFO_CS_H[/align]
[align=left]#define FIFO_CS_H[/align]
[align=left]#include <unistd.h>[/align]
[align=left]#include <stdlib.h>[/align]
[align=left]#include <stdio.h>[/align]
[align=left]#include <string.h>[/align]
[align=left]#include <fcntl.h>[/align]
[align=left]#include <sys/types.h>[/align]
[align=left]#include <sys/stat.h>[/align]
[align=left]#include <ctype.h>[/align]
[align=left]#define SERVER_FIFO "SFIFO"[/align]
[align=left]#define CLIENT_FIFO "CFIFO"[/align]
#endif
//end of fifo_cs.h

[align=left]/*file :fifo_s.c*/[/align]
[align=left]#include"fifo_cs.h"[/align]
[align=left]int main(){[/align]
[align=left] int fdserver,server;[/align]
[align=left] int fdclient;[/align]
[align=left] char strS[BUFSIZ],strC[32],client_fifo_name[32],str[80];[/align]
[align=left] FILE *fp; [/align]
[align=left] mkfifo(SERVER_FIFO,0660);[/align]
[align=left] if(fdserver=open(SERVER_FIFO,O_RDWR)==-1){[/align]
[align=left] printf("Server :Can not open fifo!/n");[/align]
[align=left] exit(1); [/align]
[align=left] } [/align]
[align=left] server=open(CLIENT_FIFO,O_RDWR);[/align]
[align=left] read(server,strC,32); [/align]
[align=left] if((fp=fopen(strC,"r+"))==NULL)[/align]
[align=left] strcpy(strS,"Can not open file./n");[/align]
[align=left] while(!feof(fp)){[/align]
[align=left] if(fgets(str,80,fp))[/align]
[align=left] strcat(strS,str); [/align]
[align=left] } [/align]
[align=left] sprintf(client_fifo_name,"%s",strC); [/align]
[align=left] if((fdclient=open(client_fifo_name,O_WRONLY))==-1)[/align]
[align=left] write(fdclient,strS,BUFSIZ);[/align]
[align=left] close(fdclient);[/align]
[align=left] close(fdserver); [/align]
[align=left] return 0; [/align]
[align=left]}[/align]
[align=left]//end of fifo_s.c[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]/*file :fifo_c.c*/[/align]
[align=left]#include"fifo_cs.h"[/align]
[align=left]int main(){[/align]
[align=left] int fdserver;[/align]
[align=left] int fdclient,client;[/align]
[align=left] char strS[BUFSIZ];[/align]
[align=left] char strC[32];[/align]
[align=left] char client_fifo_name[32]; [/align]
[align=left] if((fdserver=open(SERVER_FIFO,O_RDWR))==-1){[/align]
[align=left] printf("Server not active!/n");[/align]
[align=left] exit(1); [/align]
[align=left] } [/align]
[align=left] printf("Enter filename: ");[/align]
[align=left] gets(strC); [/align]
[align=left] sprintf(client_fifo_name,"%s",strC);[/align]
[align=left] mkfifo(client_fifo_name,0660);[/align]
[align=left] if((fdclient=open(client_fifo_name,O_RDWR))==-1){[/align]
[align=left] close(fdserver);[/align]
[align=left] printf("Can not open fifo !/n");[/align]
[align=left] exit(1); [/align]
[align=left] }[/align]
[align=left] mkfifo(CLIENT_FIFO,0660);[/align]
[align=left] client=open(CLIENT_FIFO,O_RDWR);[/align]
[align=left] write(client,strC,32); [/align]
[align=left] read(fdclient,strS,BUFSIZ); [/align]
[align=left] printf("Client :Get server message :%s/n",strS);[/align]
[align=left] close(fdserver);[/align]
[align=left] close(fdclient); [/align]
[align=left] unlink(client_fifo_name);[/align]
return 0;
}
// end of fifo_c.c

运行服务器:gcc fifo_s.c(回车)
运行客户端:gcc fifo_c.c(回车)
./a.out(回车)
输出: Enter filename:
输入文件名回车,如果文件存在则输出:
Client :Get server message :+文件内容
否则输出: Can not open file.

FIFO是一个能在互不相关进程之间传送数据的特殊文件。一个或多个进程向内写入数据,在另一端由一个进程负责读出。我们可以通过FIFO来建立无关进程之间的数据通信。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐