免费注册 查看新帖 |

Chinaunix

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

[Linux] struct epoll_event的定义与应用问题【已解决】 [复制链接]

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-01-13 14:55 |只看该作者 |倒序浏览
本帖最后由 jiufei19 于 2015-01-13 21:50 编辑

大家好,我在阅读linux下epoll的实现与应用内容,发现一个问题理解不到,请大家帮忙。我阅读的linux源码版本为2.6.23和3.14.1,下面我描述下问题

   struct epoll_event {
        __u32 events;
        __u64 data;
   } EPOLL_PACKED;

上面这个定义是2.6.23和3.14.1中给出的,当编写应用程序时,通常会进行如下处理:
------------------------------------------
struct epoll_event event;
int ret;

event.data.fd = fd;

-----------------------------------------

我感到奇怪的是红色字体的event.data.fd这个变量是从哪里得到的?struct epoll_event结构体中并没有看到有这样的字段呀?

查了下《Linux System Programming》这本书,其中给出了如下定义

struct epoll_event {
    __u32 events;
    union {
       void *ptr;
       int fd;           
       __u32 u32;
       __u64 u64;
    } data;
};

显然这个版本的内核中的上述定义说明了event.data.fd的来源,但是我不知道这个是哪一版本的内核。然而,为啥新的内核版本并没有这样定义,却仍然可以这样使用呢?

求职 : 系统工程师等
论坛徽章:
5
技术图书徽章
日期:2014-04-19 22:01:05天蝎座
日期:2014-05-09 13:49:28双子座
日期:2014-06-16 15:08:042015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:28
2 [报告]
发表于 2015-01-13 14:59 |只看该作者
union类型啊,上面用户态使用fd,下面内核态用data就可以访问fd。
这样做是为了兼容上面除了fd使用其他字段,底层就一个data就都搞定了!

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
3 [报告]
发表于 2015-01-13 15:05 |只看该作者
回复 2# qxhgd


    感谢qxhgd答复,你是说的如下定义吧:

typedef union epoll_data
{
    void *ptr;
    int fd;
    uint32_t u32;
    uint64_t u64;
} epoll_data_t;
struct epoll_event
{
    uint32_t events; /* Epoll events */
    epoll_data_t data; /* User data variable */

但是我在两个内核版本中都没有搜到上述union的定义呢?

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
4 [报告]
发表于 2015-01-13 21:49 |只看该作者
回复 3# jiufei19


    终于找到了,就在sys/epoll.h头文件中进行了上述定义,之前的cscope没有包含这个目录下的文件,结果没有搜到
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP