管道与文件锁的应用

自己就仿佛在黑暗的管道中行走,只有开始与结果,没有过程

#include <stdio.h>
#include <stdlib.h>

#include <sys/types.h>
#include <unistd.h>

int pid1,pid2;
int main()
{
 int fd[2];
 char outpipe[100],inpipe[100];//定义管道的入端与出端的缓冲空间
 pipe(fd);

 while((pid1=fork())==-1);//如果创建不成功继续创建
 /*if(0 < pid)///创建不成功,打印错误并退出
 {
  perror("fork");
  exit(-1);

 }*/

 if(pid1==0)
 {
  lockf(fd[1],1,0);//文件描述符,互斥锁定区域,锁定当前偏移量到文件尾的区域
  sprintf(outpipe,"child 1 process is sending message \n");//写一串字符到outpipe中
  write(fd[1],outpipe,50);//将outpipe中的字符写50到fd[1]中
  sleep(5);
  lockf(fd[1],0,0);//解锁 
 }

 else
 {

  while((pid2=fork())==-1);//如果创建不成功继续创建
  /*if(0 < pid)//创建不成功,打印错误并退出
  {
  perror("fork");
  exit(-1);

  }*/
  if(pid2==0)//子进程2,与子进程1类似
  {

   lockf(fd[1],1,0);
   sprintf(outpipe,"child 2 process is sending message\n");
   write(fd[1],outpipe,50);
   sleep(5);
   lockf(fd[1],0,0);
   exit(-1);
  }

  else
  {
   wait(NULL);等待子进程结束
   read(fd[0],inpipe,50);//将管道f[0]中的值读50字节的串到inpipie中
   printf("%s\n",inpipe);//输出inpipe中的字符

   wait(NULL);
   read(fd[0],inpipe,50);
   printf("%s\n",inpipe);
   exit(0);
    
  }  
 }
}
 

你可能感兴趣的:(职场,管道,休闲,管道文件锁)