LINUX进程控制(2)
,szBuf);
} close(iFile); return 0; }
4.2. 用exec*继承打开的文件 用exec*创建的子进程照样可以继承已经打开的文件. 示例: // Parent2.cpp {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ #include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> int main() { char szBuf[32]={0}; if(fork()>0)//parent process 拥有帝国一切,皆有可能。欢迎访问phome.net return 0; //child process close(STDOUT_FILENO); int iFile=open("./a.txt",O_WRONLY|O_CREAT,0666); if(iFile!=STDOUT_FILENO){ perror("open a.txt fail"); return -1; } lseek(iFile,0,SEEK_END); execl("./Child2.exe",NULL); perror("execl fail!"); //must never run here! return 0; } //Parent2.cpp}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} //Child2.cpp{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ #include <stdio.h> #include <unistd.h> int main() { printf("hello\n"); return 0; } //Child2.cpp}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} 4.3. 用管道(FIFO)传递打开的文件的信息 如果用exec*创建子进程,虽然子进程可以自动继承父进程打开的文件,但是exec*后,子进程完全替换掉了父进程的空间,比较难获取打开的文件描述符,在这种情况下,采用进程间的通讯机制,让子进程知道自己继承了一些什么已经打开的文件. 示例,用FIFO传递打开的文件的信息: //Parent3.cpp{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ #include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <errno.h> int main() { char szBuf[32]={0}; int fdFifo,fdFile; fdFile=open("./a.txt",O_WRONLY|O_CREAT,0666); if(fdFile<0){ perror("open a.txt fail"); return -1; } lseek(fdFile,0,SEEK_END); if(mkfifo("MyFifo",0666)<0 && errno != EEXIST){ perror("create fifo fail"); return -2; } if(fork()>0){//parent process close(fdFile); if((fdFifo=open("MyFifo",O_WRONLY))<0){ perror("open fifo fail"); return -3; } write(fdFifo,&fdFile,sizeof(fdFile)); 拥有帝国一切,皆有可能。欢迎访问phome.net close(fdFifo); //unlink("MyFifo"); return 0; } //child process execl("./Child3.exe",NULL); perror("execl fail!"); //must never run here! perror("execl fail!"); //must never run here! return 0; } //Parent3.cpp}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} //Child3.cpp{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <string.h> int main() { int fdFi |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |