unix网络编程学习--守护进程

/*
实现将字符加密,颠倒返回
*/
#include 
   
   
    
    
#include 
    
    
     
     
#include 
     
     
      
      
#include 
      
      
       
       
#include 
       
       
         #include 
        
          #include 
         
           #include 
          
            #include 
           
             #include 
            
              #include 
             
               #include 
              
                #include 
               
                 #include 
                
                  #include 
                 
                   #include 
                  
                    #include 
                   
                     const char * end; #define MAX 100 #define PORT 34561 #define LAN 8 #define OPEN_LINKER 56 void err_quit(const char *s) { syslog(LOG_INFO|LOG_LOCAL3,"%s", s); exit(0); } void SyslogInfor(const char * s) { syslog(LOG_INFO|LOG_LOCAL3,"%s", s); return ; } void err_child_progress(const int status) { char buff[MAX]; if(WIFEXITED(status)) { err_quit("其终止状态是按照正常终止的\n"); return; } else if(WIFSIGNALED(status)) { snprintf(buff, MAX, "异常终止,其异常终止的ID是%d\n",WTERMSIG(status)); err_quit(buff); return; } else if(WIFSTOPPED(status)) { snprintf(buff, MAX, "当前暂停子进程,且子进程id是%d\n",WSTOPSIG(status)); err_quit(buff); return ; } } int Socket(const int AF,const int SO,const int a) { int sockfd; sockfd=socket(AF,SO,a); if(sockfd==-1) err_quit("socket error!"); return sockfd; } int Bind(const int Sockfd,const struct sockaddr *server,socklen_t len) { int bin; bin=bind(Sockfd, server, len); if(bin==-1) err_quit("bind error!"); return bin; } int Listen(const int sockfd,const int lan) { int listened; listened=listen(sockfd, lan); if(listened==-1) err_quit("listen error"); return listened; } void guard_structure(const char *panem,int facility) { pid_t pid; if((pid==fork())>0) _exit(0); else if(pid<0) err_quit("创建进程失败!\n"); if(setsid()<0) err_quit("创建session leader失败\n"); signal(SIGHUP, SIG_IGN); //忽略信号 /* 这里你还要考虑一下就是一个问题,如果你在打开一个终端的话依然可能造成其终止进程 */ if((pid=fork())>0) _exit(0); else if(pid<0) err_quit("二次守护进程失败!\n"); //改变工作的路径到根目录下 chdir("/"); umask(0); /* 关闭文件描述符,防止有描述符的占用 */ for(int i=0;i 
                    
                      0); err_child_progress(status); return ; } void ControlingStringsTCP(const int con) { /* 防止服务器主机出现sigpipe信号的出现,造成服务器关闭,我们的设计就应该考虑的是用select函数防止服务器关闭出现。 这样的情况是:一个进程向一个已收到RST的套接字上执行写操作内核就会发送一个sigpipe信号,终止信号。其捕获后应该做的是不加任何处理signal(sigpipe,sig_ign);返回的errno==EPiPE的 */ char sen[MAX],rec[MAX]; int num,i,j; memset(sen, 0, MAX); memset(rec,0,MAX); while((num=(int)read(con, rec, MAX))>0) { rec[num]='\0'; if(num>MAX) return ; j=strlen(rec); for(int k=0;k 
                     
                       ='a'&&rec[k]<='z')||(rec[k]>='A'&&rec[k]<='Z')) { rec[k]+=4; if((rec[k]>'Z'&&rec[k]<='Z'+4)||(rec[k]>'z')) rec[k]-=4; } } rec[j]='\0'; for(i=0;i 
                      
                        0) { snprintf(buf, MAX, "from the client:%s:%d\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port)); SyslogInfor(buf); } pid=fork(); if(pid==0) { close(sockfd); ControlingStringsTCP(con); exit(0); } close(con); } return 0; } 
                       
                      
                     
                    
                   
                  
                 
                
               
              
             
            
           
          
         
       
      
      
     
     
    
    
   
   

守护进程实现,unix网络编程学习让自己更美好!

MAC OS 配置守护进程:gcc 编译后  ,使用sudo 命令,用ps -ejf  查看进程id,进程其父进程为1(init进程);  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值