epoll_create和epoll_create1

 

名字

       epoll_create epoll_create1 - 創建epoll文件描述符

 

摘要

       #include <sys/epoll.h>
       int epoll_create(int size);       

       int epoll_create1(int flags);

 

描述

       epoll_create()

       創建一個新的epoll實例。從Linux 2.6.8開始,size參數被忽略,但必須大於零; 看下面的注意事項。

 

        epoll_create()

        返回一個指向新創建的epoll實例的文件描述符。 這個文件描述符用於所有後續調用epoll的所有接口。 當不再需要文件描述符             時,使用close關閉。 當所有指向這個epoll實例的文件描述符都關閉時,內核銷燬實例並釋放關聯的重用資源。

 

      epoll_create1()

     如果flags爲0,epoll_create1()和刪除了過時size參數的epoll_create()相同。
    如果flags中包含以下值就有不同的表現:
    EPOLL_CLOEXEC
    在文件描述符上面設置執行時關閉(FD_CLOEXEC)標誌描述符。
    具體請參考open中對O_CLOEXEC標誌的描述。

 

返回值

    成功時,返回一個非負文件描述符。
    發生錯誤時,返回-1,並且將errno設置爲指示錯誤

 

errno錯誤

    EINVAL  size不是正數。
    EINVAL  在epoll_create1()的flags標誌中包含無效值。
    EMFILE  達到了用戶對epoll設置的最大實例數限制,在/proc/sys/fs/epoll/max_user_instances具體查看
    EMFILE  達到了進程中文件描述符的最大限制
    ENFILE  達到了系統範圍內對打開文件總數的限制
    ENOMEM  沒有足夠的內存來創建內核對象。

 

版本
    epoll_create()在2.6版中添加到內核中。glibc庫從版本2.3.2開始提供了支持。
    epoll_create1()在2.6.27版中添加到內核中。glibc庫從2.9版開始提供了支持

標準參考
    epoll_create()是Linux獨有的
   
注意事項
最初epoll_create()的參數size告訴內核添加到epoll實例的文件描述符個數,內核根據這個參數分配最初的描述事件結構體的空間,(如果有必要,內核會分配超過size的空間)
現在size不再需要了(內核動態的分配描述事件需要的空間),但是size必須要設置大於0的值,是爲了新的應用能運行在舊的內核上。

如有侵權請告知,將撤回,作爲自己學習用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章