2012-12-25 17 views
3

我正在使用epoll和大量的fd編寫應用程序。 爲了提高對應用程序相關數據庫的fd搜索,我想傳遞給epoll應用程序信息,比如DB數組中的索引。 我想使用data-> ptr(epoll_data_t - > * ptr),據我瞭解,我可以給出指針,它保存來自應用程序層的fd和隱私信息,但找不到任何文檔或示例。如何使用epoll與data-> ptr,而不是data.fd?

我發現這個職位,這似乎是相關的,但沒有實現的例子... How to use epoll_event data.ptr

感謝

+0

這裏有另一個相關的問題,可能會幫助更好:http://stackoverflow.com/questions/9325748/about-epoll-ctl – Barmar

回答

9

你可以把任何你在data想要的。它不被epoll自己使用,它只是在事件發生在參數列表中指定的fd時才返回。

+0

嗨巴爾默 - 感謝您的評論。 我錯過了這裏的東西,epoll數據結構是UNION,看起來像這樣: typedef union epoll_data { void * ptr; int fd; uint32_t u32; uint64_t u64; } epoll_data_t; - >這意味着如果我寫* ptr的東西,然後寫入fd,它會覆蓋* ptr值(它是聯合...) 什麼是寫入* ptr的正確方法,並保持fd? – user1927740

+1

您不需要在'epoll_data'中保留fd。被輪詢的fd是「epoll_ctl()」的第三個參數,而不是結構中的那個。如果_you_需要知道fd,則將其放在'ptr'指向的結構中。 – Barmar

+0

謝謝 - 按預期工作! – user1927740

相關問題