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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pause函数

發布時間:2023/11/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pause函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

pause函數

?????? 調用該函數可以造成進程主動掛起,等待信號喚醒。調用該系統調用的進程將處于阻塞狀態(主動放棄cpu) 直到有信號遞達將其喚醒。

??? int pause(void);???? 返回值:-1 并設置errno為EINTR

?????? 返回值:

① 如果信號的默認處理動作是終止進程,則進程終止,pause函數么有機會返回。

????????????? ② 如果信號的默認處理動作是忽略,進程繼續處于掛起狀態,pause函數不返回。

????????????? ③ 如果信號的處理動作是捕捉,則【調用完信號處理函數之后,pause返回-1】

????????????? ?? errno設置為EINTR,表示“被信號中斷”。想想我們還有哪個函數只有出錯返回值。

????????????? ④ pause收到的信號不能被屏蔽,如果被屏蔽,那么pause就不能被喚醒。

?

練習:使用pause和alarm來實現sleep函數。??????????????????????????????????????????????????????????? ?????? ?????? ?????? 【mysleep.c】

注意,unslept = alarm(0)的用法。

例如:睡覺,alarm(10)鬧鈴。??

正常: 10后鬧鈴將我喚醒,這時額外設置alarm(0)取消鬧鈴,不會出錯。

????????????? 異常: 5分鐘,被其他事物吵醒,alarm(0)取消鬧鈴防止打擾。

/*** pause.c ***/ #include<stdio.h> #include<errno.h> #include<unistd.h> #include<signal.h> #include<stdlib.h>void catch_sigalrm(int signo) {; }unsigned int mysleep(unsigned int seconds) {int ret;struct sigaction act,oldact;act.sa_handler = catch_sigalrm;sigemptyset(&act.sa_mask);act.sa_flags = 0;ret = sigaction(SIGALRM,&act,&oldact);if(-1 == ret){perror("sigaction error");exit(1);}alarm(seconds);ret = pause();if(-1 == ret && errno == EINTR){printf("pauses success\n");}ret =alarm(0);sigaction(SIGALRM,&oldact,NULL);return ret; }int main() {while(1){mysleep(3);printf("-----------\n");}return 0; }

?

轉載于:https://www.cnblogs.com/wanghao-boke/p/11334979.html

總結

以上是生活随笔為你收集整理的pause函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。