LINUX进程控制(3)
n hex =");
scanf("%x",&key); //输入读写权限 printf("Enter the operation permission mode in octal ="); scanf("%o",&iMode); //输入创建标志 printf("Enter create flags:\n" "No flags =0\n" "IPC_CREAT =1 \n" "IPC_CREAT and IPC_EXCL =2\n"); printf("Flags = "); scanf("%d",&iFlag); //输出各参数值 printf("key=0x%x,mode=0%o,flags=%d\n", key,iMode,iFlag); if(iFlag==0){ iFlag=iMode|0; }else if(iFlag==1){ iFlag=iMode|IPC_CREAT; }else{ iFlag=iMode|IPC_CREAT|IPC_EXCL; } printf("IPC_CREAT:%x,iFlag:%x\n",IPC_CREAT,iFlag); //创建或打开消息队列 if((iMsgQueId=msgget(key,iFlag))==-1){ perror("msgget fail"); return -1; }else{ puts("msgget succeed."); return 0; } } 5.6.2. 发送与接收消息 发送和接收消息的函数原型: #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> int msgsnd(int msqid, struct msgbuf *msgp, size_t msgsz, int msgflg); ssize_t msgrcv(int msqid, struct msgbuf *msgp, size_t msgsz, long msgtyp, int msgflg); 参数msgid指明消息队列的ID; 参数msgbuf是消息结构体: struct msgbuf { long mtype; /* type of message */ char mtext[1]; /* message text */ }; 字段mtype是用户自己指定的消息类型,该结构体第2个成员仅仅是一种说明性的结构,实际上用户可以使用任何类型的数据; 参数gsz是消息体的大小,每个消息体最大不要超过4K; 参数msgflg可以为0或IPC_NOWAIT,如果设置IPC_NOWAIT,则msgsnd和msgrcv都不会阻塞,此时如果队列满并调用msgsnd,或队列空时调用msgrcv,将返回错误; 参数msgtyp有3种选项: } return 0; } 6. 守护进程(Daemon) 守护进程(Daemon)是在后台运行不受终端控制的进程.比如各种网络服务器,如果web服务器,ftp服务器等. 想要脱离所有终端的原因是守护进程可能是从终端启动,在这之后这个终端要能用来执行其它任务,或者关闭掉终端仍不影响已经启动的守护进程,简单一点的办法是启动的时候在命令行末尾加一个&符号,例如 nohup myserver.out&,但是也可以写代码将程序转成守护进程. 变为守护进程可按照如下几步进行: 在父进程重执行fork,并让父进程退出去,从而断开程序与终端的关联; 在子进程中调用setsid();使新进程成为新的进程组组长和新会话期的领导; 让根目录成为进程的工作目录,如果守护进程是从一个可挂接的文件系统中启动的话,如果不修改工作目录,在守护进程运行时,该文件系统就不能卸载; 修改umask为0,避免在守护进程中创建的文件受到原有父进程的umask属性的影响; 尽可能地关闭不需要的文件描述符. 示例: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/stat.h> void BeDaemon() { const int MAXFD=64; if(fork()!=0) //脱离控制终端 exit(0); setsid(); //成为新进程组组长和新会话领导 chdir("/"); //设置工作目录为根目录 umask(0); //重设文件访问权限掩码 for(int i=0;i<MAXFD;i ) //尽可能关闭所有从父进程继承来的文件 close(i); } int main() { int iLoop=0;
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |