文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>有名管道

有名管道

时间:2010-12-08  来源:luozhiyong131

 

写:

#include <sys/types.h>

#include <sys/stat.h>

#include <errno.h>

#include <fcntl.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#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 <sys/types.h>

#include <sys/stat.h>

#include <errno.h>

#include <fcntl.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#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); //删除文件

}

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载