unix网络编程学习--守护进程
来源:互联网 发布:淘宝试用联盟网 编辑:程序博客网 时间:2024/05/16 18:59
/*实现将字符加密,颠倒返回*/#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 56void 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进程);
阅读全文
0 0
- unix网络编程学习--守护进程
- 关于Unix网络编程卷一创建守护进程
- 《网络编程》守护进程
- UNIX高级编程-守护进程
- 《Unix环境高级编程》学习之编写守护进程
- UNIX环境高级编程学习之第十三章守护进程 - 初始化一个守护进程
- UNIX环境高级编程学习之第十三章守护进程 - 单实例的守护进程
- 《UNIX环境高级编程》笔记--守护进程
- unix环境高级编程-守护进程
- Unix/Linux编程-创建守护进程
- Unix网络编程代码 第13章 守护进程和inetd超级服务器
- UNIX网络编程---守护进程和inetd超级服务器(十三)
- Linux/UNIX网络编程笔记(五) -守护进程和inetd超级服务器
- 《unix网络编程》(21)守护进程和inetd超级服务器
- UNIX网络编程卷一:第十三章 守护进程和inetd超级服务器
- UNIX网络编程——守护进程和inted超级服务器
- UNIX网络编程笔记(9)—守护进程和inetd超级服务器
- UNIX再学习 -- 守护进程(转)
- ubuntu命令大全
- 开通博客纪念!
- 计算机网络和因特网概述
- 解决NVIDIA Share的录制内存报错问题
- 栈的应用
- unix网络编程学习--守护进程
- 微服务架构的好处与坏处
- 头条面经
- Python之list对应元素求和
- mybatis中实现一对一,一对多查询
- 【前端知识点】30分钟了解ES6最新核心特性
- Linux内核目录结构
- java反射机制
- 程序人生