您的位置: 飞扬精品软件园 >> 文章中心 >> 系统教程 >> Linux系统 >> 命名管道

相关文章链接

最新新闻资讯

    命名管道

    命名管道


    • 阅览次数: 文章来源: 原文作者: 整理日期: 2010-07-12

    今天完成命名管道的实验。

      命名管道也是按照文件操作流程进行的,可以看做特殊文件。

      写管道进程:打开-写-关闭

      读管道进程:打开-读-关闭

      本实验采用阻塞式读写管道,一个程序写,另一个读。

      源代码来自华清远见:

      写:

      #include<sys/types.h>

      #include<sys/stat.h>

      #include<errno.h>

      #include<fcntl.h>

      #include<stdio.h>

      #include<stdlib.h>

      #include<limits.h>

      #define MYFIFO  "/tmp/myfifo"

      #define MAX_BUFFER_SIZE     PIPE_BUF

      int main(int argc, char* argv[])

      {

      char buff[MAX_BUFFER_SIZE];

      int fd;

      int nwrite;

      if(argc <= 1)

      {

      printf("usage: ./write string!\n");

      exit(1);

      }

      sscanf(argv[1], "%s", buff);

      fd = open(MYFIFO, O_WRONLY);//打开管道,写阻塞方式

      if(fd == -1)

      {

      printf("open fifo file error!\n");

      exit(1);

      }

      if((nwrite = write(fd, buff, MAX_BUFFER_SIZE)) > 0)//写管道

      {

      printf("write '%s' to FIFO!\n ", buff);

      }

      close(fd);//关闭

      exit(0);

      }

      读:

      #include<sys/types.h>

      #include<sys/stat.h>

      #include<errno.h>

      #include<fcntl.h>

      #include<stdio.h>

      #include<stdlib.h>

      #include<limits.h>

      #define MYFIFO  "/tmp/myfifo"

      #define MAX_BUFFER_SIZE     PIPE_BUF

      int main()

      {

      char buff[MAX_BUFFER_SIZE];

      int fd;

      int nread;

      //判断管道是否存在,如果不存在则创建

      if(access(MYFIFO, F_OK) == -1)

      {

      if((mkfifo(MYFIFO, 0666) < 0) && (errno != EEXIST))

      {

      printf("cannot creat fifo file!\n");

      exit(1);

      }

      }

      fd = open(MYFIFO, O_RDONLY);//打开管道,只读阻塞方式

      if(fd == -1)

      {

      printf("open fifo file error!\n");

      exit(1);

      }

      while(1)

      {

      memset(buff, 0, sizeof(buff));

      if((nread = read(fd, buff, MAX_BUFFER_SIZE)) > 0)//读管道

      {

      printf("read '%s' from FIFO\n", buff);

      }

      }

      close(fd);//关闭

      exit(0);

      }

      编译运行,打开两个终端,一个写,一个读。


查看所有评论

网友对命名管道的评论

网名:
主题:
内容:
验证码: