⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fork.c

📁 模拟操作系统底层通过管道的文件传送,定义读写缓冲区,编译后,可看到结果
💻 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 + -