#include"stdio.h" #include"stdlib.h" #include"string.h" #include "sys/types.h" #include "sys/file.h" #include "unistd.h" char r_buf[4]; char w_buf[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"); if((pid1=fork())==0) producer(1); if((pid2=fork())==0) producer(2); if((pid3=fork())==0) consumer(1); if((pid4=fork())==0) consumer(2); } close(pipe_fd[0]); close(pipe_fd[1]); int i,pid,status; for(i=0; i<4; i++) pid=wait(&status); exit(0); } int producer(int id) { printf("producer %d is running!\n",id); close(pipe_fd[0]); int i=0; for(i=1; i<10; i++) { sleep(3); if(id==1) strcpy(w_buf,"aaa\0"); else strcpy(w_buf,"bbb\0"); if(write(pipe_fd[1],w_buf,4)==-1) printf("write to pipe error\n"); } close(pipe_fd[1]); printf("producer %d is over!\n",id); exit(id); } int consumer(int id) { close(pipe_fd[1]); printf(" producer %d is running!\n",id); if (id==1) strcpy(w_buf,"ccc\0"); else strcpy(w_buf,"ddd\0"); while(1) { sleep(1); strcpy(r_buf,"eee\0"); if(read(pipe_fd[0],r_buf,4)==0) break; printf("consumer %d get %s, while the w_buf is %s\n",id,r_buf,w_buf); } close(pipe_fd[0]); printf("consumer %d is over!\n", id); exit(id); }你能和我解释pid_t的作用与用法吗
时间: 2023-06-26 16:09:48 浏览: 107
csapp_深入理解计算机系统_相关文件_csapp.h_csapp.c
5星 · 资源好评率100%
pid_t是一个数据类型,它是用来存储进程ID(Process ID)的。在Unix/Linux操作系统中,每个进程都有一个唯一的进程ID,用pid_t类型的变量来存储这个ID。pid_t类型的变量通常用于创建进程、等待进程结束、发送信号等系统调用中。
在上面的代码中,pid_t被用于存储进程的ID,例如pid1、pid2、pid3和pid4分别存储了四个进程的ID。这些进程是通过fork()函数创建的,因此在父进程中,可以通过调用wait()函数来等待这些子进程结束。此外,在进程的退出状态码中,也可以使用pid_t类型的变量来表示子进程的ID。
阅读全文