*******************************************
* ATM(automatic teller machine) *
* 自助服务终端系统v4版 *
*******************************************
要求:
1.在v3版本的基础上将系统进一步分隔成client 和 server 两个模块,并将V2版本之上的多个小功能模块分别
做成精灵进程.
2.利用unix c++ 中读写文件存取对象方式来实现,读写文件操作.
3.客户接收用户输入基本信息后,利用 unix c++中的消息队列与 server 端业务子精灵进程进行通信.
4.所有的业务子模块系统后台操作,利用一个起动文件停止文件,起动和停止所有的精灵进程
5.使用 unix c++中的信号知识,避免僵死进程的产生.
6.给 server 端写一个起动与停止调用程序.
7.与用户交互的操作全部在 client 端实现.
核心技术:
1.在前期V3版本的基础之上,新增知识点,信号机制及精灵进程,主要改进服务器端,服务器端每次接收到
用户一次请求时,是通过一个子进程来完成相应的业务操作,以增强服务器功能,加强并发访问能力,服务
器接到用户请求时,产生一个子进程,子进程完成相应的业务操作后,自动退出,所以服务主进程还必须要
利用信号机制来回收子进程,以避免僵死进程的产生.
2.为了更好的调用服务器端的起动与停止,需要分别使用相应的起动与停止程序来进行操作,起动程序编写的
思想是,起动文件产生个子进程,由子进程负责调用 execlp 系列函数还对 server 端主业务程序进行起动,起
动程序,将子进程返回的进程ID(实际就是server 端的精灵进程)写入某个指定文件后,退出运行.
停止程序主要是去读取,起动程序写入某个文件的精灵进程ID号,取出再利用kill向此进程发送一个停止信号,
以此达到一个起动与停止 server 程序的目的.
相关帮助:
起动程序编程帮助API:
int main(){
// 打开存取进程ID的文件
int fd=open("pid.txt",O_CREAT|O_RDWR,0700);
if(fd<0) { cout<<" error in open file write child pid "<<endl;
exit(1);
}
//创建子进程
int ret=fork();
if(ret==0){
//在起动进程子进程中调用 server 业务主操作程序
execlp("server","server",NULL);
cout<<" server start ........................."<<endl;
}
//在起动进程中将子进程号记录至文件中
write(fd,&ret,sizeof(int));
//起动程序退出
close(fd);
cout<<" start server ok ! .................."<<endl;
exit(0);
return 0;
}
停止程序编程帮助API:
int main(){
// 打开存取精灵进程ID号的文件
int fd=open("pid.txt",O_RDWR);
if(fd<0){
cout<<" the error in read file pid.txt read child pid "<<endl;
exit(0);}
int pid;
//读取文件中的精灵进程ID号
while(1)
{
int n=read(fd,&pid,sizeof(int));
if(n==0) break;
//向精灵进程发送一个退出自定义信号,让其退出
kill(pid,SIGUSR1);
cout<<pid<<"Now exit...."<<endl;
}
close(fd);
return 0;
}
posted on 2008-04-10 18:07
李峰 阅读(354)
评论(1) 编辑 收藏 引用 所属分类:
unix_c++