日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

select与pselect的信号屏蔽

發(fā)布時(shí)間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 select与pselect的信号屏蔽 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

pselect()?函數(shù)的原型是:int?pselect(int?nfds,?fd_set?*readfds,?fd_set?*writefds,
???????????????????fd_set?*exceptfds,?const?struct?timespec?*timeout,?const?sigset_t?*sigmask);
它和?select()?函數(shù)基本相同,區(qū)別在于兩個(gè)不同的參數(shù),一個(gè)是?struct?timespec?*timeout,另一個(gè)是?sigset_t?*sigmask?。


struct?timespec?結(jié)構(gòu)定義為:
??struct?timespec?{
???????????????long????tv_sec;?????????
???????????????long????tv_nsec;????????
???????????};


其中的時(shí)間表示秒和納秒。和?select()?不同,每次超時(shí)后,pselect()?并不會(huì)去修改這個(gè)時(shí)間參數(shù),也就是說,沒有必要再次對(duì)這個(gè)時(shí)間參數(shù)進(jìn)行初始化。
對(duì)于最后一個(gè)參數(shù)?sigmask?表示信號(hào)屏蔽掩碼,設(shè)置掩碼可以對(duì)相應(yīng)的信號(hào)進(jìn)行屏蔽,這樣pselect就一直不會(huì)被屏蔽的信號(hào)所中斷。


select等待期間不想被中斷的方法有兩個(gè):

其一:pselect?代替select

#include?"unp.h"


void
sig_alarm(int?signo)
{
????????printf("%d\n",signo);
????????if(signo?==?SIGALRM)
????????{
????????????????printf("SIGALRM\n");
????????}
????????else?if(signo?==?SIGVTALRM)
????????{
????????????????printf("SIGVTALRM\n");
????????}
}

int
main()
{
????????sigset_t?sigmask;
????????fd_set?rset;
????????ssize_t?nread;
????????char?buf[MAXLINE];
????????int?maxfd;
????????struct?itimerval?value;
????????signal1(SIGALRM,sig_alarm);

????????value.it_interval.tv_sec?=?3;
????????value.it_interval.tv_usec?=?0;
????????value.it_value.tv_sec?=?1;
????????value.it_value.tv_usec?=?0;
????????if(setitimer(ITIMER_REAL,&value,NULL)?==?-1)
????????{
????????????????printf("setitimer?error.\n");
????????????????return?0;

????????}

????????if(sigemptyset(&sigmask)?==??-1)
????????{
????????????????printf("sigemptyset?error.\n");
????????????????return?0;
????????}

????????if(sigaddset(&sigmask,SIGALRM)?==?-1)
????????{
????????????????printf("sigaddset?error.\n");
????????????????return?0;
????????}
????????while(1)
????????{
????????????????FD_ZERO(&rset);
????????????????FD_SET(fileno(stdin),&rset);
????????????????maxfd?=?fileno(stdin)?+?1;

????????????????int?nready?=?pselect(maxfd,&rset,NULL,NULL,NULL,&sigmask);
????????????????//printf("select?called.%d\n",nready);
????????????????if(nready?<?0)
????????????????{
????????????????????????if(errno?==?EINTR)
????????????????????????{
????????????????????????????????printf("interruped.\n");
????????????????????????}
????????????????}
????????????????else
????????????????{
????????????????????????int?nread?=?ReadLine(fileno(stdin),buf,MAXLINE);
????????????????????????if(nread?<?0)
????????????????????????{
????????????????????????????????printf("讀取失敗!\n");
????????????????????????????????continue;
????????????????????????}
????????????????//??????printf("nread:?%d\n",nread);
????????????????????????//Write(stdin,buf,nread);
????????????????????????printf("%s",buf);
????????????????}
????????}
}

其二:運(yùn)用sigprocmask函數(shù)


#include?"unp.h"


void
sig_alarm(int?signo)
{
????????printf("%d\n",signo);
????????if(signo?==?SIGALRM)
????????{
????????????????printf("SIGALRM\n");
????????}
????????else?if(signo?==?SIGVTALRM)
????????{
????????????????printf("SIGVTALRM\n");
????????}
}

int
main()
{
????????sigset_t?sigmask;
????????fd_set?rset;
????????ssize_t?nread;
????????char?buf[MAXLINE];
????????int?maxfd;
????????struct?itimerval?value;
????????signal1(SIGALRM,sig_alarm);

????????value.it_interval.tv_sec?=?3;
????????value.it_interval.tv_usec?=?0;
????????value.it_value.tv_sec?=?1;
????????value.it_value.tv_usec?=?0;
????????if(setitimer(ITIMER_REAL,&value,NULL)?==?-1)
????????{
????????????????printf("setitimer?error.\n");
????????????????return?0;

????????}

????????if(sigemptyset(&sigmask)?==??-1)
????????{
????????????????printf("sigemptyset?error.\n");
????????????????return?0;
????????}

????????if(sigaddset(&sigmask,SIGALRM)?==?-1)
????????{
????????????????printf("sigaddset?error.\n");
????????????????return?0;

????????}

????????sigprocmask(SIG_BLOCK,&sigmask,NULL);

????????while(1)
????????{
????????????????FD_ZERO(&rset);
????????????????FD_SET(fileno(stdin),&rset);
????????????????maxfd?=?fileno(stdin)?+?1;

????????????????//int?nready?=?pselect(maxfd,&rset,NULL,NULL,NULL,&sigmask);

????????????????//printf("select?called.%d\n",nready);

???????????????int?nready?=?select(maxfd,&rset,NULL,NULL,NULL);

????????????????if(nready?<?0)
????????????????{
????????????????????????if(errno?==?EINTR)
????????????????????????{
????????????????????????????????printf("interruped.\n");
????????????????????????}
????????????????}
????????????????else
????????????????{
????????????????????????int?nread?=?ReadLine(fileno(stdin),buf,MAXLINE);
????????????????????????if(nread?<?0)
????????????????????????{
????????????????????????????????printf("讀取失敗!\n");
????????????????????????????????continue;
????????????????????????}
????????????????//??????printf("nread:?%d\n",nread);
????????????????????????//Write(stdin,buf,nread);
????????????????????????printf("%s",buf);
????????????????}
????????}

}


比較兩種方法,都可以有效防止select被信號(hào)中斷,經(jīng)我測(cè)試,兩者還是有區(qū)別的,第一種當(dāng)你在終端輸入數(shù)據(jù)時(shí),時(shí)鐘信號(hào)處理函數(shù)是會(huì)被執(zhí)行的,而第二種則徹底屏蔽了時(shí)鐘信號(hào)。

總結(jié)

以上是生活随笔為你收集整理的select与pselect的信号屏蔽的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜天堂网 | 狠狠老司机| 欧美丝袜一区二区 | 中文字幕欧美在线观看 | 久久福利视频网 | 波多野结衣黄色片 | 女生被草| 女人被狂躁c到高潮喷水电影 | 精品久久久久久久久久久久久久久久久 | 欧美一区二区区 | 写真福利片hd在线播放 | 亚洲在线色 | 亚洲一区视频 | 日韩国产精品一区 | 成人91免费视频 | 俺也来俺也去俺也射 | 日韩在线视频网站 | 中国一及毛片 | 叶全真三级 | 男人在线天堂 | 91视频xxx| 精品www| 久草色视频| 老熟妇毛片 | 福利影院av | 97在线视频免费 | www.男女| 蜜臀久久99精品久久久久久宅男 | 国产成人在线视频网站 | 美女羞羞动态图 | 日本免费一区二区三区四区 | 日韩综合在线视频 | 精品国产制服丝袜高跟 | 嫩草www | 欧美一级片网址 | 欧美高清大白屁股ass18 | 羽月希奶水一区二区三区 | 大色av| 无码精品国产一区二区三区免费 | 中文字幕影片免费在线观看 | 国产精品第二页 | 噜噜啪啪| 波多野结衣一区二区在线 | 影音先锋在线视频 | 亚洲电影一区二区三区 | 日日夜夜91 | 国产传媒在线播放 | 短裙公车被强好爽h吃奶视频 | 黄色国产一级片 | 日韩欧美成人一区二区 | 韩国av免费观看 | 91蜜桃视频| 国产精品尤物 | 日本一区二区免费在线观看 | 午夜天堂精品 | 亚洲一级网 | 国产成人愉拍精品久久 | 中国女人做爰视频 | 成年人免费大片 | 中文字幕高清在线 | 日韩性xxx | 午夜天堂在线观看 | 不卡精品视频 | 久久桃花网 | 波多野42部无码喷潮 | 性福网站 | 国产精品正在播放 | 免费网站看av| 老公吃小头头视频免费观看 | 求免费黄色网址 | 成人自拍偷拍 | 波多野结衣先锋影音 | 日韩美女黄色片 | 男裸体无遮挡网站 | 亚洲av成人一区二区 | 成人av免费| 91www | 91麻豆产精品久久久久久 | 亚洲美女福利视频 | 午夜少妇av| 激情小说专区 | 麻豆视频精品 | 在线国产精品一区 | 韩国女主播一区二区 | 二色av | ww成人| 狠狠干干干 | www.久久久| 偷拍老头老太高潮抽搐 | 国产一级做a爰片久久毛片男 | 强伦人妻一区二区三区 | 亚洲欧美中文字幕 | 欧美日韩久久婷婷 | 国产精品无码专区 | 女人下面流白浆的视频 | 99爱在线| 亚洲永久| 91网页在线观看 | 免费在线观看网址入口 |