进程环

来源:互联网 发布:python execute 编辑:程序博客网 时间:2024/04/25 12:58
  1. #include <stdlib.h>
  2. #include <unistd.h>
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include "mystring.h"
  6. #include "file.h"
  7. #include "tools.h"
  8. #include "myerror.h"
  9. #include "restart.h"
  10. int main(int argc,char * argv[]){
  11.     int pfd[2];
  12.     pid_t childpid;
  13.     int i;
  14.     int loopfork = 20;
  15.     int errno;
  16.     
  17.     if( pipe(pfd) == -1 ){
  18.         MyError("pipe is error!");
  19.         return -1;
  20.     }
  21.     errno = dup2(pfd[0],STDIN_FILENO);
  22.     errno = dup2(pfd[1],STDOUT_FILENO);
  23.     if(errno == -1){
  24.         MyError("dup2 is fail!");
  25.         return -1;
  26.     }
  27.     errno = close(pfd[0]);
  28.     errno = close(pfd[1]);
  29.     if(errno == -1){
  30.         MyError("close pfd0 or pfd1 is fail!");
  31.         return -1;
  32.     }
  33.     for(i = 1;i < loopfork; i++){
  34.         if( pipe(pfd) == -1 ){
  35.             MyError("loopfork pipe is error!");
  36.             return -1;
  37.         }
  38.         if( (childpid = fork()) == -1){
  39.             MyError("loopfork fork is error!");
  40.             return -1;
  41.         }
  42.         if(childpid > 0){
  43.             errno = dup2(pfd[1],STDOUT_FILENO);
  44.         }
  45.         if(childpid == 0){
  46.             errno = dup2(pfd[0],STDIN_FILENO);
  47.         }
  48.         if(errno == -1){
  49.             MyError("loopfork dup2 is fail!");
  50.             return -1;
  51.         }
  52.         errno = close(pfd[0]);
  53.         errno = close(pfd[1]);
  54.         if(errno == -1)
  55.             return -1;
  56.         if(childpid)
  57.             break;
  58.     }
  59.     /*
  60.     while(R_wait(NULL) > 0)
  61.         ;
  62.     */
  63.     fprintf(stderr,"process is NO.%d,pid is %ld,ppid is %ld/n",i,(long)getpid(),(long)getppid());
  64.     return 0;
  65. }