全文预览

实验4进程通信

上传者:学习一点 |  格式:doc  |  页数:5 |  大小:0KB

文档介绍
程之间的读写,只需把无关的读端或写端的文件描述符关闭即可。例如在图8.5中把父进程的写端fd[1]和子进程的读端fd[0]关闭。这时,父子进程之间就建立起了一条“子进程写入父进程读”的通道。总结·只有在管道的读端存在时向管道中写入数据才有意义。否则,向管道中写入数据的进程将收到内核传来的SIFPIPE信号(通常Brokenpipe错误)。·向管道中写入数据时,linux将不保证写入的原子性,管道缓冲区一有空闲区域,写进程就会试图向管道写入数据。如果读进程不读取管道缓冲区中的数据,那么写操作将会一直阻塞。·父子进程在运行时,它们的先后次序并不能保证,因此,在这里为了保证父进程已经关闭了读描述符,可在子进程中调用sleep函数附录#include<stdio.h>//printf#include<stdlib.h>//exit#include<unistd.h>//pipe#include<string.h>//strlen#include<pthread.h>//pthread_createintmain(){intfd[2];intpid=0;charstr[]="issendingamessagetoparent!";charreadbuf[1024];if(pipe(fd)<0){printf("pipeerror!\n");}if((pid=fork())<0){printf("forkerror!\n");}elseif(pid==0){//closereadchannelclose(fd[0]);write(fd[1],str,strlen(str));}else{//closewritechannelclose(fd[1]);read(fd[0],readbuf,sizeof(readbuf));printf("%s\n",readbuf);}return0;}

收藏

分享

举报
下载此文档