免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1765 | 回复: 5
打印 上一主题 下一主题

epoll 新问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-18 11:12 |只看该作者 |倒序浏览
typedef union epoll_data
{   
        void *ptr;                          //这个参数是干什么用的???????????????
                int fd;   
        __uint32_t u32;   
                                               
         __uint64_t u64;   
} epoll_data_t;   



各位大虾,帮我看看能不能实现这个功能:

  ev.data.ptr =  X;    //给ev.data.ptr 赋值 : 其中 X 值可以是整型, 也可是字符型

  ev.data.fd = m_socket;   

   在后面的可读事件中:

   events[n].data.fd  可以返回有可读事件的描述符, 即m_socket
    events[n].data.ptr  可否得到 之前赋给ev.data.ptr 的值


  谢谢



   int epfd, nfds, m_socket;
   char Str[1024];

    struct epoll_event ev,events[20];   
   epfd = epoll_create(10);         

  int n;
  while(1)
  {
      

    m_socket =      accept();  //这个m_socket  是新连接的socket 其他略去
   
   char p[256];
    strcpy(p, "asdfghj");
    printf("p = %s\n",p);

    ev.data.ptr = p;    // ev.data.ptr  是否可以和  ev.data.fd  一样 可以传递
    printf("ev.data.ptr = %s\n", ev.data.ptr);  //此处 正常输出

     ev.data.fd = m_socket;               
    ev.events = EPOLLERR|EPOLLHUP|EPOLLPRI|EPOLLHUP|EPOLLIN|EPOLLET;   
    epoll_ctl(epfd, EPOLL_CTL_ADD, m_socket, &ev);

    nfds = epoll_wait(epfd, events, 20, -1);
    for ( n = 0; n < nfds; ++ n)
      {

           if(events[n].events&EPOLLIN)
       {
        printf("there is a readable events  events[n].events = %d \n", events[n].events);

                printf("events[n].data.ptr = %s\n", events[n].data.ptr); //此处段错误,不知道 怎样把ev.data.ptr  传过来

                memset(Msg, 0, 256);
        int count = recv(events[n].data.fd, Msg, 5, 0);
                    
        printf("buf = %s  count = %d\n", Msg, count);
        
            }
        }
    }

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
2 [报告]
发表于 2009-03-18 11:32 |只看该作者
ev.data.ptr = p; //句1
ev.data.fd = m_socket;//句2

union,句2覆盖了句1

论坛徽章:
0
3 [报告]
发表于 2009-03-18 11:38 |只看该作者

回复 #3 yangsf5 的帖子

谢谢 你们 !

这样说来 上面的功能实现不了了  日

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2009-03-18 11:42 |只看该作者
当然可以实现,你将 fd 赋给 8 bytes内存高位, ptr赋给低位,不就行了

论坛徽章:
0
5 [报告]
发表于 2009-03-18 13:34 |只看该作者

回复 #5 cookis 的帖子

谢谢  不过貌似赋值当前时间秒数,不够长 !!

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
6 [报告]
发表于 2009-03-18 15:48 |只看该作者
typedef union epoll_data
{   
        void *ptr;                          //这个参数是干什么用的???????????????
                int fd;   
        __uint32_t u32;   
                                                
         __uint64_t u64;   
} epoll_data_t;   

可以用 ptr指向一个上下文结构体.
如果是的32位系统还可以把u64分开用
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP