利用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来建立无关进程之间的数据通信。
[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来建立无关进程之间的数据通信。
相关文章推荐
- 利用Libev写一个简单的client和server程序
- How To Create A Client Server Application In Minutes[如何在几分钟的时间里编写一个客户机/服务器控制台程序]
- 一步步编写一个AndroidStudio_NDK UDPClient 程序
- 利用栈的基本操作编写一个行编辑程序,当前一个字符有误时,输入#消除,当前面一行有误时,输入@消除前面行的字符序列
- 编写Linux下的UDP Client/Server程序
- 利用Python的SocketServer框架编写网络服务程序
- 试利用栈的基本操作编写一个行编辑程序,当前一个字符有误时,输入#消除,当前面一行有误时,输入@消除前面行的字符序列
- 编写Linux下的UDP Client/Server程序
- IDTCPSERVER/IDTCPCLIENT设计一个外网和内网信息传递程序
- 编写Linux下的UDP Client/Server程序
- 利用if else 语句编写程序读取输入,直到#。用一个感叹号代替每个句号,将原有的每个感叹号用两个感叹号替换,最后 报告进行了多少次替换。
- 利用反射机制编写一个程序,这个程序能指定调用类的某个方法及构造方法,并把操作信息输出到控制台。
- 利用case的穿透现象编写一个查询季节的程序(处女作O(∩_∩)O哈哈~)
- 利用QT编写一个简单爬虫程序
- 利用fwrite编写的一个测硬盘速度的程序
- 如何开发一个Server-Client模型的程序
- 问题:利用 C++的各种控制语句编写一个万年历程序。 要求:显示任何年份的日历,日历以月份顺序排列,每月以星期顺序排列,类似于一 般挂历上的格式。
- 一个简单的tcp client/server小程序
- 《c primer pius》第十章第6题,编写一个程序,初始化一个二维double数组,并利用练习2中的任一函数来把这个数组复制到另一个二维数组(因为二维数组是数组的数组,所以可以使用处理一维数组的
- 利用Python编写一个程序 统计当前目录下的每个文件类型的文件数目