2012-04-04 10 views
5

yerine epoll_create1() işlevinin avantajı nedir? ile select değiştirmek için bir multiithread Linux-2.6.32 + uygulamasını yeniden yazıyorum. bayraklar eskimiş boyut argümanı düşürülür olması dışında sonra 0, iseEpoll_create()

, epoll_create1() epoll_create olarak() aynıdır: epoll_create1(2) için

adam sayfaları beyan ederim.

Ancak maxevents olarak epoll_wait(2) kullanılan bu eskimiş boyut argümanı değil mi?

epoll_wait(int epfd, struct epoll_event *events, 
        int maxevents, int timeout); 

Bu epoll kullanırken biz epoll_create1 olayların sayısını ilan önleyebilirsiniz ama er ya da geç epoll_wait çağrılırken ona başvuru gerektiği anlamına gelir? Eğer öyleyse, oyuna epoll_create1 getirmenin amacı nedir?

Bu konuda beni aydınlattığınız için teşekkür ederiz.

cevap

6

Hayır, epoll_wait ile maxevents, size döndürülen maksimum olay sayısını bildirir. Çekirdeğinizde kaç tane tutulduğu ile ilgisi yoktur.

epoll_create'un eski sürümleri, belirli sınırlamaları belirlemek için boyutu kullanmış, ancak artık kullanılmamaktadır, dolayısıyla size argümanı geçersizdir.

epoll_create1 kullanmanın avantajı, şu anda exec-close-exec ile sınırlı olduğunu düşündüğüm bayrakları belirtmenize izin vermesidir (böylece dosya tanıtıcısı exec başka bir işlemle otomatik olarak kapatılır). Bayrağın ayarlanması için

+0

Teşekkür toplam fd sayımı değil saymak bu. Epoll_create1'de, çekirdeğin kendi iç yapılarını boyutlandırmasına izin verdim, tamam. Ben de 'maxevents' parametresinin düşürüleceğini düşünüyordum, ama durum böyle değil. – noisebleed

1

epoll_create1() kaynağı sağlar. Boyutu şimdi ayarlamanıza gerek yok. Çekirdek kaynak kodunda aslında

: /fs/eventpoll.c

SYSCALL_DEFINE1(epoll_create, int, size) 
{ 
    if (size <= 0) 
     return -EINVAL; 

    return sys_epoll_create1(0); 
} 

max_events dönüşü kontrol etmek için ise epoll_wait() Paramete fd bütün eventpoll yapı içinde açıklamak için

+0

Tamam, şimdi görüyorum ki 'epoll_create' ve 'maxollents' 'epoll_wait''nin' dimension' argümanı aynı şey değildir. Teşekkürler. – noisebleed