进程间通信1
来源:互联网 发布:寻找质数的算法 编辑:程序博客网 时间:2024/06/08 14:57
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/stat.h>#include <fcntl.h>#include <signal.h>#include <string.h>#include <errno.h>#define BUFF_SIZE 1024int main (int argc,char ** argv){ int fd ; if((fd=open(argv[1],O_RDONLY))<0) { fprintf(stderr,"open fifo %s for reading failed :%s \n",argv[1],strerror(errno)); exit(1); } fprintf (stdout,"open fife for reading successed\n"); char buf[BUFF_SIZE]; ssize_t n; while (1) { again: if((n=read(fd,buf,BUFF_SIZE))<0) { if(errno==EINTR) { goto again; } else { fprintf (stderr,"read failed on %sfifo :%s\n",argv[1],strerror(errno)); exit(1); } } else if(n==0) { fprintf (stderr,"peer closed fifo.\n"); break; } else { buf[n]='\0'; fprintf(stdout,"read %d bytes from fife :%s",n,buf); } } return 0;}
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/stat.h>#include <fcntl.h>#include <signal.h>#include <string.h>#include <errno.h>#define BUFF_SIZE 1024void signal_handler( int signo){ fprintf(stdout,"Canght signal %d \n",signo);}int main( int argc,char **argv){signal(SIGPIPE,signal_handler); char buf[BUFF_SIZE]; ssize_t n; int fd; if((fd=open(argv[1],O_WRONLY))<0) { fprintf(stderr,"open fifo %s for writing failed :%s \n",argv[1],strerror(errno)); } while (fgets(buf,BUFF_SIZE,stdin)) { again: if(n==write(fd,buf,strlen(buf))) { if(errno==EINTR) { goto again; } else { fprintf (stderr,"write()failed on fifo :%s\n",strerror(errno)); break; } } } return 0;}