📄 fork.c
字号:
#include "sys/types.h"#include "sys/file.h"#include "unistd.h"char r_buff[4];char w_buff[4];int pipe_fd[2];pid_t pid1,pid2,pid3,pid4;int producer(int id);int consumer(int id);int main(int argc,char **argv){if(pipe(pipe_fd)<0) {printf("pipe create error.\n"); exit(-1); }else { printf("pipe is created successfully!\n"); pid1=fork(); if(pid1==0) {printf("pid1=%d in parent process.\n",pid1);producer(1); } else printf("pid1=%d\n",pid1); pid2=fork(); if(pid2==0) producer(2); else printf("pid2=%d\n",pid2); pid3=fork(); if(pid3==0) consumer(1); else printf("pid3=%d\n",pid3); pid4=fork(); if(pid4==0) consumer(2); else printf("pid4=%d\n",pid4); }int i,pid,status;for(i=0;i<4;i++) pid=wait(&status);close(pipe_fd[1]);close(pipe_fd[0]);printf("---The program is over!---\n");exit(0);}int producer(int id){printf("producer %d is running!\n",id);int i;for(i=1;i<10;i++) { sleep(3); if(id==1) sprintf(w_buff,"a%02d",i); else sprintf(w_buff,"b%02d",i); if(write(pipe_fd[1],w_buff,4)==-1) printf("write to pipe error.\n"); }write(pipe_fd[1],"end\0",4);printf("producer %d is over!\n",id);exit(id);}int consumer(int id){while(1) { sleep(2); read(pipe_fd[0],r_buff,4); if(strcmp(r_buff,"end")==0)break; printf("consumer %d get %s\n",id,r_buff); }printf("consumer %d is over!\n",id);exit(id);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -