守护进程(管道通信实现)

创建两个进程,一个有名管道。一个进程如果正在运行就往管道里面发送运行信息,守护进程负责读取运行信息,一旦守护进程超过三秒读取不到运行信息,就自动将进程重启

守护进程代码:

[objc]  view plain  copy
 print ?
  1. #include   
  2.   
  3. #include   
  4.   
  5. #include   
  6.   
  7. #include   
  8.   
  9. #include   
  10.   
  11. #include   
  12.   
  13. #include   
  14.   
  15. #define FIFO "/root/linux/myfifo"  
  16.   
  17.   
  18. main(int argc, char** argv)  
  19.   
  20. {  
  21.       
  22.     char buf[100];  
  23.       
  24.     int fd;  
  25.       
  26.     int nread;  
  27.       
  28.     int count = 0;  
  29.   
  30.       
  31.     if((mkfifo(FIFO,O_CREAT|O_EXCL) < 0) &&(errno != EEXIST))  
  32.       
  33.    {  
  34.           
  35.         printf("creat fifo error!\n");  
  36.       
  37.     }  
  38.   
  39.       
  40.     printf("perparing for reading bytes...\n");  
  41.   
  42.       
  43.     memset(buf,0,sizeof(buf));  
  44.   
  45.       
  46.       
  47.     fd = open(FIFO,O_RDONLY|O_NONBLOCK,0);  
  48.       
  49.     if(fd == -1)  
  50.       
  51.     {  
  52.           
  53.         perror("open");  
  54.       
  55.         exit(1);  
  56.       
  57.     }  
  58.       
  59.     while(1)  
  60.       
  61.    {  
  62.           
  63.         memset(buf,0,sizeof(buf));  
  64.   
  65.       
  66.         if(nread = read(fd,buf,100) <= 0)  
  67.       
  68.        {  
  69.           
  70.          
  71.              if(errno == EAGAIN)  
  72.           
  73.             {  
  74.               
  75.                   printf("no data yet\n");  
  76.           
  77.              }  
  78.           
  79.              count++;  
  80.               
  81.              printf("read none\n");  
  82.           
  83.              sleep(1);  
  84.           
  85.              if(count == 3)  
  86.           
  87.             {  
  88.               
  89.                  printf("重新启动函数\n");  
  90.               
  91.                  system("./write success");  
  92.           
  93.                  count = 0;  
  94.           
  95.             }  
  96.               
  97.         }  
  98.       
  99.         else  
  100.       
  101.        {  
  102.       
  103.              printf("read %s from FIFO\n",buf);  
  104.       
  105.              sleep(1);  
  106.       
  107.         }  
  108.       
  109.    }  
  110.       
  111.    pause();  
  112.       
  113.    unlink(FIFO);  
  114.   
  115. }  
守护进程代码:
[objc]  view plain  copy
 print ?
  1. #include   
  2.   
  3. #include   
  4.   
  5. #include   
  6.   
  7. #include   
  8.   
  9. #include   
  10.   
  11. #include   
  12.   
  13. #include   
  14.   
  15. #define FIFO_SERVER "/root/linux/myfifo"  
  16.   
  17.   
  18. main(int argc, char** argv)  
  19.   
  20. {  
  21.       
  22.     int fd;  
  23.       
  24.     char buf[100];  
  25.       
  26.     int nwrite;  
  27.   
  28.       
  29.     fd = open(FIFO_SERVER,O_WRONLY|O_NONBLOCK,0);  
  30.       
  31.     if(argc == 1)  
  32.       
  33.     {  
  34.   
  35.         printf("please send st\n");  
  36.   
  37.     exit(-1);  
  38.       
  39.     }  
  40.   
  41.       
  42.     strcpy(buf,argv[1]);  
  43.   
  44.       
  45.     if((nwrite = write(fd,buf,100)) == 1)  
  46.       
  47.     {  
  48.           
  49.         if(errno == EAGAIN)  
  50.       
  51.        {  
  52.           
  53.             printf("not been read yet\n");  
  54.       
  55.        }  
  56.           
  57.        else  
  58.           
  59.       {  
  60.               
  61.             printf("write %s to FIFO\n",buf);  
  62.           
  63.        }  
  64.       
  65.     }  
  66.   
  67. }  

你可能感兴趣的:(Linux)