freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

linux環(huán)境進(jìn)程間通信(全)(參考版)

2025-06-22 14:14本頁(yè)面
  

【正文】 同時(shí),可驗(yàn)證信號(hào)的排隊(duì)問(wèn)題。}說(shuō)明,命令行參數(shù)為信號(hào)值,后臺(tái)運(yùn)行sigreceive signo amp。 }}void new_op(int signum,siginfo_t *info,void *myact){ printf(receive signal %d, signum)。 } while(1) { sleep(2)。 if(sigaction(sig,amp。 =SA_SIGINFO。 sigemptyset(amp。 int sig。 include include sys/include void new_op(int,siginfo_t*,void*)。其他可能要做的無(wú)非是與信號(hào)集相關(guān)的幾種操作。深入淺出:信號(hào)應(yīng)用實(shí)例linux下的信號(hào)應(yīng)用并沒(méi)有想象的那么恐怖,程序員所要做的最多只有三件事情:1. 安裝信號(hào)(推薦使用sigaction()); 2. 實(shí)現(xiàn)三參數(shù)信號(hào)處理函數(shù),handler(int signal,struct siginfo *info, void *); 3. 發(fā)送信號(hào),推薦使用sigqueue()。因?yàn)?,信?hào)處理過(guò)程中,errno值隨時(shí)可能被改變。The Open Group視下列函數(shù)為可再入的:_exit()、access()、alarm()、cfgetispeed()、cfgetospeed()、cfsetispeed()、cfsetospeed()、chdir()、chmod()、chown()、close()、creat()、dup()、dup2()、execle()、execve()、ftl()、fork()、fpathconf()、fstat()、fsync()、getegid()、 geteuid()、getgid()、getgroups()、getpgrp()、getpid()、getppid()、getuid()、kill()、link()、lseek()、mkdir()、mkfifo()、 open()、pathconf()、pause()、pipe()、raise()、read()、rename()、rmdir()、setgid()、setpgid()、setsid()、setuid()、 sigaction()、sigaddset()、sigdelset()、sigemptyset()、sigfillset()、sigismember()、signal()、sigpending()、sigprocmask()、sigsuspend()、sleep()、stat()、sysconf()、tcdrain()、tcflow()、tcflush()、tcgetattr()、tcgetpgrp()、tcsendbreak()、tcsetattr()、tcsetpgrp()、time()、times()、 umask()、uname()、unlink()、utime()、wait()、waitpid()、write()。不可再入函數(shù)在信號(hào)處理函數(shù)中被視為不安全函數(shù)。因?yàn)檫M(jìn)程在收到信號(hào)后,就將跳轉(zhuǎn)到信號(hào)處理函數(shù)去接著執(zhí)行。 程序的穩(wěn)定性為了增強(qiáng)程序的穩(wěn)定性,在信號(hào)處理函數(shù)中應(yīng)使用可重入函數(shù)。info) if (rcvd_sig == 1) { ..}調(diào)用成功返回信號(hào)值,否則返回1。rcvd_sig = sigwaitinfo(amp。sigprocmask(SIG_BLOCK, amp。sigaddset(amp。sigemptyset(amp。int rcvd_sig。 include int sigwaitinfo(sigset_t *set, siginfo_t *info).該函數(shù)與sigsuspend()類(lèi)似,阻塞一個(gè)進(jìn)程直到特定信號(hào)發(fā)生,但信號(hào)到來(lái)時(shí)不執(zhí)行信號(hào)處理函數(shù),而是返回信號(hào)值。POSIX ,包括以下三個(gè)函數(shù): sigqueue()、sigtimedwait()、sigwaitinfo()。 程序的可移植性考慮到程序的可移植性,應(yīng)該盡量采用POSIX信號(hào)函數(shù),POSIX信號(hào)函數(shù)主要分為兩類(lèi): o POSIX : Kill()、sigaction()、sigaddset()、sigdelset()、sigemptyset()、sigfillset()、sigismember()、sigpending()、sigprocmask()、sigsuspend()。 2)在信號(hào)被注銷(xiāo)到相應(yīng)的信號(hào)處理函數(shù)執(zhí)行完畢這段時(shí)間內(nèi),如果進(jìn)程又收到同一信號(hào)多次,則對(duì)實(shí)時(shí)信號(hào)來(lái)說(shuō),每一次都會(huì)在進(jìn)程中注冊(cè);而對(duì)于非實(shí)時(shí)信號(hào)來(lái)說(shuō),無(wú)論收到多少次信號(hào),都會(huì)視為只收到一個(gè)信號(hào),只在進(jìn)程中注冊(cè)一次。進(jìn)程注銷(xiāo)信號(hào)后,立即執(zhí)行相應(yīng)的信號(hào)處理函數(shù),執(zhí)行完畢后,信號(hào)的本次發(fā)送對(duì)進(jìn)程的影響徹底結(jié)束。 進(jìn)程在執(zhí)行信號(hào)相應(yīng)處理函數(shù)之前,首先要把信號(hào)在進(jìn)程中注銷(xiāo)。對(duì)于非實(shí)時(shí)信號(hào)來(lái)說(shuō),由于在未決信號(hào)信息鏈中最多只占用一個(gè)sigqueue結(jié)構(gòu),因此該結(jié)構(gòu)被釋放后,應(yīng)該把信號(hào)在進(jìn)程未決信號(hào)集中刪除(信號(hào)注銷(xiāo)完畢);而對(duì)于實(shí)時(shí)信號(hào)來(lái)說(shuō),可能在未決信號(hào)信息鏈中占用多個(gè)sigqueue結(jié)構(gòu),因此應(yīng)該針對(duì)占用sigqueue結(jié)構(gòu)的數(shù)目區(qū)別對(duì)待:如果只占用一個(gè)sigqueue結(jié)構(gòu)(進(jìn)程只收到該信號(hào)一次),則應(yīng)該把信號(hào)在進(jìn)程的未決信號(hào)集中刪除(信號(hào)注銷(xiāo)完畢)。如果存在未決信號(hào)等待處理且該信號(hào)沒(méi)有被進(jìn)程阻塞,則在運(yùn)行相應(yīng)的信號(hào)處理函數(shù)前,進(jìn)程會(huì)把信號(hào)在未決信號(hào)鏈中占有的結(jié)構(gòu)卸掉。 3. 信號(hào)在進(jìn)程中的注銷(xiāo)。因此,非實(shí)時(shí)信號(hào)又叫做不可靠信號(hào)。 注: 當(dāng)一個(gè)實(shí)時(shí)信號(hào)發(fā)送給一個(gè)進(jìn)程時(shí),不管該信號(hào)是否已經(jīng)在進(jìn)程中注冊(cè),都會(huì)被再注冊(cè)一次,因此,信號(hào)不會(huì)丟失,因此,實(shí)時(shí)信號(hào)又叫做可靠信號(hào)。}信號(hào)在進(jìn)程中注冊(cè)指的就是信號(hào)值加入到進(jìn)程的未決信號(hào)集中(sigpending結(jié)構(gòu)的第二個(gè)成員sigset_t signal),并且信號(hào)所攜帶的信息被保留到未決信號(hào)信息鏈的某個(gè)sigqueue結(jié)構(gòu)中。第三個(gè)成員是進(jìn)程中所有未決信號(hào)集,第一、第二個(gè)成員分別指向一個(gè)sigqueue類(lèi)型的結(jié)構(gòu)鏈(稱之為未決信號(hào)信息鏈)的首尾,信息鏈中的每個(gè)sigqueue結(jié)構(gòu)刻畫(huà)一個(gè)特定信號(hào)所攜帶的信息,并指向下一個(gè)sigqueue結(jié)構(gòu): struct sigqueue{ struct sigqueue *next。 sigset_t signal。信號(hào)的誕生指的是觸發(fā)信號(hào)的事件發(fā)生(如檢測(cè)到硬件異常、定時(shí)器超時(shí)以及調(diào)用信號(hào)發(fā)送函數(shù)kill()或sigqueue()等)。相鄰兩個(gè)事件的時(shí)間間隔構(gòu)成信號(hào)生命周期的一個(gè)階段。注釋中提到的對(duì)某種信號(hào)有意義指的是,在該信號(hào)的處理函數(shù)中可以訪問(wèn)這些域來(lái)獲得與信號(hào)相關(guān)的有意義的信息,只不過(guò)特定信號(hào)只對(duì)特定信息感興趣而已。 /* 對(duì)SIGPOLL信號(hào)有意義 */int si_fd。 /* 信號(hào)值,對(duì)所有實(shí)時(shí)有意義,是一個(gè)聯(lián)合數(shù)據(jù)結(jié)構(gòu), /*可以為一個(gè)整數(shù)(由si_int標(biāo)示,也可以為一個(gè)指針,由si_ptr標(biāo)示)*/ void * si_addr。 /* 用戶消耗的時(shí)間,對(duì)SIGCHLD有意義 */clock_t si_stime。 /* 發(fā)送信號(hào)進(jìn)程的真實(shí)用戶ID,對(duì)kill(2),實(shí)時(shí)信號(hào)以及SIGCHLD有意義 */int si_status。 /* 信號(hào)產(chǎn)生的原因,對(duì)所有信號(hào)有意義*/pid_t si_pid。 /* 信號(hào)值,對(duì)所有信號(hào)有意義*/int si_errno。 /* microseconds */ }。 struct timeval { long tv_sec。 /* next value */ struct timeval it_value。該系統(tǒng)調(diào)用始終返回1,并將errno設(shè)置為EINTR。sigsuspend 返回后將恢復(fù)調(diào)用之前的信號(hào)掩碼。int sigsuspend(const sigset_t *mask));sigprocmask()函數(shù)能夠根據(jù)參數(shù)how來(lái)實(shí)現(xiàn)對(duì)信號(hào)集的操作,操作主要有三種:參數(shù)how進(jìn)程當(dāng)前信號(hào)集SIG_BLOCK在進(jìn)程當(dāng)前阻塞信號(hào)集中添加set指向信號(hào)集中的信號(hào)SIG_UNBLOCK如果進(jìn)程阻塞信號(hào)集中包含set指向信號(hào)集中的信號(hào),則解除對(duì)該信號(hào)的阻塞SIG_SETMASK更新進(jìn)程阻塞信號(hào)集為set指向的信號(hào)集sigpending(sigset_t *set))獲得當(dāng)前已遞送到進(jìn)程,卻被阻塞的所有信號(hào),在set指向的信號(hào)集中返回結(jié)果。信號(hào)阻塞與信號(hào)未決每個(gè)進(jìn)程都有一個(gè)用來(lái)描述哪些信號(hào)遞送到進(jìn)程時(shí)將被阻塞的信號(hào)集,該信號(hào)集中的所有信號(hào)在遞送到進(jìn)程后都將被阻塞。信號(hào)集及信號(hào)集操作函數(shù):信號(hào)集被定義為一種數(shù)據(jù)類(lèi)型: typedef struct { unsigned long sig[_NSIG_WORDS]; } sigset_t信號(hào)集用來(lái)描述信號(hào)的集合,linux所支持的所有信號(hào)可以全部或部分的出現(xiàn)在信號(hào)集中,主要與信號(hào)阻塞相關(guān)函數(shù)配合使用。實(shí)際不是這樣的,驗(yàn)證方法很簡(jiǎn)單:自己實(shí)現(xiàn)一個(gè)單一參數(shù)信號(hào)處理函數(shù),并在程序中設(shè)置該標(biāo)志位,可以察看程序的運(yùn)行結(jié)果。即使為sa_sigaction指定了信號(hào)處理函數(shù),如果不設(shè)置SA_SIGINFO,信號(hào)處理函數(shù)同樣不能得到信號(hào)傳遞過(guò)來(lái)的數(shù)據(jù),在信號(hào)處理函數(shù)中對(duì)這些信息的訪問(wèn)都將導(dǎo)致段錯(cuò)誤(Segmentation fault)。sa_flags中包含了許多標(biāo)志位,包括剛剛提到的SA_NODEFER及SA_NOMASK標(biāo)志位。缺省情況下當(dāng)前信號(hào)本身被阻塞,防止信號(hào)的嵌套發(fā)送,除非指定SA_NODEFER或者SA_NOMASK標(biāo)志位。信號(hào)可以傳遞信息對(duì)程序開(kāi)發(fā)是非常有意義的。前面在討論系統(tǒng)調(diào)用sigqueue發(fā)送信號(hào)時(shí),sigqueue的第三個(gè)參數(shù)就是sigval聯(lián)合數(shù)據(jù)結(jié)構(gòu),當(dāng)調(diào)用sigqueue時(shí),該數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)就將拷貝到信號(hào)處理函數(shù)的第二個(gè)參數(shù)中。 }采用聯(lián)合數(shù)據(jù)結(jié)構(gòu),說(shuō)明siginfo_t結(jié)構(gòu)中的si_value要么持有一個(gè)4字節(jié)的整數(shù)值,要么持有一個(gè)指針,這就構(gòu)成了與信號(hào)相關(guān)的數(shù)據(jù)。 結(jié)構(gòu)的第四個(gè)域同樣為一個(gè)聯(lián)合數(shù)據(jù)結(jié)構(gòu): union sigval { int sival_int。 union sigval si_value。 int si_errno。 //對(duì)SIGKILL有意義的結(jié)構(gòu) struct{ ... }... ... ... ... ... //對(duì)SIGILL, SIGFPE, SIGSEGV, SIGBUS有意義的結(jié)構(gòu) struct{ ... }... ... ... } } 注:為了更便于閱讀,在說(shuō)明問(wèn)題時(shí)常把該結(jié)構(gòu)表示為附錄2所表示的形式。 /* errno值,對(duì)所有信號(hào)有意義*/ int si_code。第一個(gè)參數(shù)為信號(hào)值,第三個(gè)參數(shù)沒(méi)有使用(posix沒(méi)有規(guī)范使用該參數(shù)的標(biāo)準(zhǔn)),第二個(gè)參數(shù)是指向siginfo_t結(jié)構(gòu)的指針,結(jié)構(gòu)中包含信號(hào)攜帶的數(shù)據(jù)值,參數(shù)所指向的結(jié)構(gòu)如下: siginfo_t { int si_signo。除了可以是用戶自定義的處理函數(shù)外,還可以為SIG_DFL(采用缺省的處理方式),也可以為SIG_IGN(忽略信號(hào))。 void (*_sa_sigaction)(int,struct siginfo *, void *); }_u sigset_t sa_mask; unsigned long sa_flags; void (*sa_restorer)(void); } 其中,sa_restorer,已過(guò)時(shí),POSIX不支持它,不應(yīng)再被使用。第二個(gè)參數(shù)最為重要,其中包含了對(duì)指定信號(hào)的處理、信號(hào)所傳遞的信息、信號(hào)處理函數(shù)執(zhí)行過(guò)程中應(yīng)屏蔽掉哪些函數(shù)等等。第二個(gè)參數(shù)是指向結(jié)構(gòu)sigaction的一個(gè)實(shí)例的指針,在結(jié)構(gòu)sigaction的實(shí)例中,指定了對(duì)特定信號(hào)的處理,可以為空,進(jìn)程會(huì)以缺省方式對(duì)信號(hào)處理;第三個(gè)參數(shù)oldact指向的對(duì)象用來(lái)保存原來(lái)對(duì)相應(yīng)信號(hào)的處理,可指定oldact為NULL。 sigaction函數(shù)用于改變進(jìn)程接收到特定信號(hào)后的行為。 如果signal()調(diào)用成功,返回最后一次為安裝信號(hào)signum而調(diào)用signal()時(shí)的handler值;失敗則返回SIG_ERR。 如果該函數(shù)原型不容易理解的話,可以參考下面的分解方式來(lái)理解: typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler))。sigaction()優(yōu)于signal()主要體現(xiàn)在支持信
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1