Chinaunix首页 | 论坛 | 博客
  • 博客访问: 801159
  • 博文数量: 489
  • 博客积分: 475
  • 博客等级: 下士
  • 技术积分: 3087
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 16:28
文章分类

全部博文(489)

文章存档

2013年(7)

2012年(301)

2011年(181)

分类:

2011-12-22 20:51:32

原文地址:有名管道 作者:luozhiyong131

 

写:

#include

#include

#include

#include

#include

#include

#include

#define FIFO_SERVER "/tmp/myfifo"

 

int main(int argc,char** argv)

{

      int fd;

      char w_buf[100];

      int nwrite;

     

    /*创建有名管道*/

      if((mkfifo(FIFO_SERVER,O_CREAT|O_EXCL|O_RDWR)<0)&&(errno!=EEXIST))

           printf("cannot create fifoserver\n");

 

      /*打开管道*/

      fd=open(FIFO_SERVER,O_RDWR|O_NONBLOCK,0);

      if(fd==-1)

      {

          perror("open");

           exit(1);

      }

     

      /*入参检测*/

      if(argc==1)

      {

           printf("Please send something\n");

           exit(-1);

      }

      strcpy(w_buf,argv[1]);

     

      /* 向管道写入数据 */

      if((nwrite=write(fd,w_buf,100))==-1)

      {

           if(errno==EAGAIN)

                 printf("The FIFO has not been read yet.Please try later\n");

      }

      else

           printf("write %s to the FIFO\n",w_buf);

      close(fd); //关闭管道

      return 0;

}

 

 

 

读:

#include

#include

#include

#include

#include

#include

#include

#define FIFO "/tmp/myfifo"

 

int main(int argc,char** argv)

{

      char buf_r[100];

      int  fd;

      int  nread;

 

      printf("Preparing for reading bytes...\n");

      memset(buf_r,0,sizeof(buf_r));

     

      /* 打开管道 */

      fd=open(FIFO,O_RDONLY|O_NONBLOCK,0);

      if(fd==-1)

      {

           perror("open");

           exit(1);

      }

      while(1)

      {

           memset(buf_r,0,sizeof(buf_r));

          

           if((nread=read(fd,buf_r,100))==-1)

           {

                 if(errno==EAGAIN)

                      printf("no data yet\n");

           }

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

           sleep(1);

      }

         //后面三句话是不会被运行到的,但不会影响程序运行的效果当程序在上面的死循环中执行时收到信号后会马上结束运行而没有执行后面的三句话。这些会在后面的信号处理中讲到,现在不理解没有关系,这个问题留给大家学习了信号处理之后来解决。

      close(fd); //关闭管道

      pause(); /*暂停,等待信号*/

      unlink(FIFO); //删除文件

}

 

阅读(323) | 评论(0) | 转发(0) |
0

上一篇:信号处理

下一篇:无名管道

给主人留下些什么吧!~~