随笔-2  评论-1  文章-1  trackbacks-0

*******************************************
*     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++

评论:
# re: ATMv4版 2009-07-15 13:53 | bnmjstu
一个字,好  回复  更多评论
  

只有注册用户登录后才能发表评论。
相关文章:
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理