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