首先注意这是一个联合体。真正使用起来,事实上第一个就足够了,也就是void *,后面三个都可以用这个给“包装”起来,因为void * 是c里头的“泛型”。
楼主不妨思考为什么会这么设计。以网络编程为例,当设计处理数据包的回调函数的时候,通常你面对的数据类型都是不确定的,依赖于数据包的结构。如果让你来设计epoll_data_t,你会怎么设计???三思~~
如果我设计的话,直接一个void *搞定,就如同线程函数一样,线程函数的参数仍然是void *霸气外露。
只不过设计epoll_data_t的人可能考虑了一些最最常用的情况,比如,如果你写个网络程序只是随意测试用用,那么传一个int fd就OK了,后面的两位以此类推。
所以最后这个结构设计出来就是你现在看到的样子了。
总之呢,void *这一项是绝对不可少的,原因省略一万字。。。
epoll_data_t里面的void *ptr; int fd; u32; u64 分析
最新推荐文章于 2025-10-03 19:10:36 发布
本文探讨了epoll_data_t结构的设计理念及其在实际应用中的意义,特别是针对网络编程中处理不确定数据类型的场景。
1248

被折叠的 条评论
为什么被折叠?



