linux新的API signalfd、timerfd、eventfd使用说明
三種新的fd加入linux內(nèi)核的的版本:
signalfd:2.6.22
timerfd:2.6.25
eventfd:2.6.22
三種fd的意義:
signalfd:傳統(tǒng)的處理信號的方式是注冊信號處理函數(shù);由于信號是異步發(fā)生的,要解決數(shù)據(jù)的并發(fā)訪問,可重入問題。signalfd可以將信號抽象為一個文件描述符,當(dāng)有信號發(fā)生時可以對其read,這樣可以將信號的監(jiān)聽放到select、poll、epoll等監(jiān)聽隊列中。
timerfd:可以實現(xiàn)定時器的功能,將定時器抽象為文件描述符,當(dāng)定時器到期時可以對其read,這樣也可以放到監(jiān)聽隊列的主循環(huán)中。
eventfd:實現(xiàn)了線程之間事件通知的方式,eventfd的緩沖區(qū)大小是sizeof(uint64_t);向其write可以遞增這個計數(shù)器,read操作可以讀取,并進(jìn)行清零;eventfd也可以放到監(jiān)聽隊列中,當(dāng)計數(shù)器不是0時,有可讀事件發(fā)生,可以進(jìn)行讀取。
三種新的fd都可以進(jìn)行監(jiān)聽,當(dāng)有事件觸發(fā)時,有可讀事件發(fā)生。
signalfd涉及API:
[cpp] view plaincopy參數(shù)fd:如果是-1則表示新建一個,如果是一個已經(jīng)存在的則表示修改signalfd所關(guān)聯(lián)的信號;
參數(shù)mask:信號集合;
參數(shù)flag:內(nèi)核版本2.6.27以后支持SFD_NONBLOCK、SFD_CLOEXEC;
成功返回文件描述符,返回的fd支持以下操作:read、select(poll、epoll)、close
timerfd涉及的API
[cpp] view plaincopyeventfd涉及API:
[cpp] view plaincopy創(chuàng)建一個eventfd,這是一個計數(shù)器相關(guān)的fd,計數(shù)器不為零是有可讀事件發(fā)生,read以后計數(shù)器清零,write遞增計數(shù)器;返回的fd可以進(jìn)行如下操作:read、write、select(poll、epoll)、close
?
這是三種新的fd的基本概念,接下來的幾篇會通過例子程序來說明各種fd的用法。
總結(jié)
以上是生活随笔為你收集整理的linux新的API signalfd、timerfd、eventfd使用说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《三体》IP授权!剧本杀《三体·永恒纪元
- 下一篇: 俄罗斯被打回“石器时代”!进口芯片频率不