进程间通信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;}