low_pipe.c

来自「linux环境利用管道进行通讯的例子」· C语言 代码 · 共 54 行

C
54
字号
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <limits.h>

#define BUFSZ PIPE_BUF
void err_quit(char *msg);

int main(int argc, char *argv[])
{
  int fd[2];
  int fdin;
  char buf[BUFSZ];
  int pid, len;

  if((pipe(fd))<0) err_quit("pipe");

  if((pid=fork())<0) err_quit("fork");
  if(pid==0)
  {
    close(fd[1]);
    while((len=read(fd[0],buf,BUFSZ))>0)
      write(STDOUT_FILENO,buf,len);
    close(fd[0]);
  }
  else
  {
    close(fd[0]);
    if((fdin=open(argv[1],O_RDONLY))<0)
    {
      perror("open");
      write(fd[1],"123\n",4);
    }
    else
    {
      while((len=read(fdin,buf,BUFSZ))>0)
      write(fd[1],buf,len);
      close(fdin);
    }
    close(fd[1]);
  }
  waitpid(pid,NULL,0);
  exit(EXIT_SUCCESS);
}

void err_quit(char *msg)
{
  perror(msg);
  exit(EXIT_FAILURE);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?