加载中…
个人资料
来一桶
来一桶
  • 博客等级:
  • 博客积分:0
  • 博客访问:7,582
  • 关注人气:1
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

linux 下阻塞睡眠等待poll函数简单实现

(2012-03-19 21:44:16)
标签:

杂谈

分类: linux系统编程

#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <poll.h>


#define OPEN_FLAGS O_RDWR|O_CREAT
#define OPEN_MODE  00777

#define W_DATA "howaylee"

int main(int argc, char* argv[])
{
 int ret = -1;
 int fd1 = -1;
 int fd2 = -1;

 char r_buf[12] = {0};

 struct pollfd fds[2] = {0};

 //open fd1
 fd1 = open(argv[1], OPEN_FLAGS, OPEN_MODE);
 if (-1 == fd1)
 {
  perror("open fd1 failed: ");
  return -1;
 }
 //write fd1
 ret = write(fd1, W_DATA, sizeof(W_DATA));
 if(-1 == ret)
 {
  perror("write fd1 failed: ");
  goto _OUT;
 }
 //lseek fd1 head
 ret = lseek(fd1, 0, SEEK_SET);
 if(-1 == ret)
 {
  perror("lseek fd1 failed: ");
  goto _OUT;
 }

 //open fd2
 fd2 = open(argv[2], OPEN_FLAGS, OPEN_MODE);
 if (-1 == fd2)
 {
  perror("open fd2 failed: ");
  return -1;
 }

 


 while(1)
 {
  //初始化pollfd
  fds[0].fd = fd1;
  //可读
  fds[0].events = POLLIN;

  fds[1].fd = fd2;
  //可写
  fds[1].events = POLLOUT;

  //poll
  ret = poll(fds, sizeof(fds)/sizeof(fds[0]), -1);
  if(-1 == ret)
  {
   perror("poll failed: ");
   goto _OUT;
  }

  //read fd1
  if(fds[0].revents & POLLIN )
  {
   //清空缓存
   //memset(r_buf, 0, sizeof(r_buf));
   ret = read(fd1, r_buf, sizeof(r_buf));
   if(-1 == ret)
   {
    perror("poll read failed: ");
    goto _OUT;
   }
   printf("read = %s\n", r_buf);
  }

  //write fd2
  if(fds[1].revents & POLLOUT )
  {
   ret = write(fd2, r_buf, sizeof(r_buf));
   if(-1 == ret)
   {
    perror("poll write failed: ");
    goto _OUT;
   }
   printf("write = %s\n", r_buf);
  }
 }

 //close fd1 fd2
 close(fd1);
 close(fd2);

_OUT:
 return ret;
}

 

 

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有