




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、信號概述本講大綱:在在終終端中端中查查看常看常見見的信的信號號信信號處號處理理在終端中查看常見的信號 在在LinuxLinux這個多用戶多進程的系統(tǒng)中,信號的存在是必然的,這個多用戶多進程的系統(tǒng)中,信號的存在是必然的,信號可以理解為一個軟中斷,在某個條件下,系統(tǒng)會發(fā)出某個信信號可以理解為一個軟中斷,在某個條件下,系統(tǒng)會發(fā)出某個信號給正在運行的進程,通知進程需要去執(zhí)行某一特定的事件。號給正在運行的進程,通知進程需要去執(zhí)行某一特定的事件。在前面的進程控制一章中,介紹了在終端中可以使用在前面的進程控制一章中,介紹了在終端中可以使用killkill命令查看命令查看LinuxLinux系統(tǒng)中所支持的信號
2、,這些信號都是以系統(tǒng)中所支持的信號,這些信號都是以SIGSIG開頭的,接下來開頭的,接下來對對LinuxLinux系統(tǒng)中常見的信號進行介紹。系統(tǒng)中常見的信號進行介紹。11.1.1 在終端中查看常見的信號 在終端中輸入命令在終端中輸入命令“kill l”kill l”可以列出可以列出LinuxLinux系統(tǒng)中的所有信號系統(tǒng)中的所有信號,如圖,如圖11.111.1所示。所示。說明:圖說明:圖11.111.1中,每一個信號類型前面都有一個正整數(shù),中,每一個信號類型前面都有一個正整數(shù),這個正整數(shù)與信號代表相同的含義,稱之為信號編號。這個正整數(shù)與信號代表相同的含義,稱之為信號編號。 信號的宏定義和編號都
3、定義在信號的宏定義和編號都定義在signal.hsignal.h頭文件中。在終端中可頭文件中。在終端中可以通過輸入命令以通過輸入命令“man 7 signal”man 7 signal”查看查看LinuxLinux系統(tǒng)中支持的信號的系統(tǒng)中支持的信號的詳細(xì)含義,如圖詳細(xì)含義,如圖11.211.2所示。所示。信號處理 信號作為一種進程間通信的機制,主要用于處理異步事件,通信號作為一種進程間通信的機制,主要用于處理異步事件,通常如果有信號發(fā)送到正在執(zhí)行的進程中時,進程會有如下常如果有信號發(fā)送到正在執(zhí)行的進程中時,進程會有如下3 3種處理種處理信號的方法:信號的方法:(1 1)默認(rèn)信號的處理方法,系統(tǒng)
4、為每一個信號都設(shè)置了默認(rèn)的處)默認(rèn)信號的處理方法,系統(tǒng)為每一個信號都設(shè)置了默認(rèn)的處理方法,通常為終止進程。理方法,通常為終止進程。(2 2)捕捉信號,使進程執(zhí)行指定的程序代碼。)捕捉信號,使進程執(zhí)行指定的程序代碼。(3 3)忽略信號,對該信號不做任何處理。進程繼續(xù)執(zhí)行。)忽略信號,對該信號不做任何處理。進程繼續(xù)執(zhí)行。這這3 3種處理捕捉到的信號的方法只是比較基本的方法,在實際應(yīng)用種處理捕捉到的信號的方法只是比較基本的方法,在實際應(yīng)用中,對信號的處理并不會這么單一,例如,有些進程在執(zhí)行時不中,對信號的處理并不會這么單一,例如,有些進程在執(zhí)行時不希望被信號突然打斷,但是還不希望忽略此信號,此時進程
5、會將希望被信號突然打斷,但是還不希望忽略此信號,此時進程會將該信號掛起,在需要時在處理該信號。該信號掛起,在需要時在處理該信號。產(chǎn)生信號本講大綱:kill()kill()函函數(shù)數(shù)raise()raise()函函數(shù)數(shù)alarm()alarm()函函數(shù)數(shù)kill()函數(shù)前面介紹的在終端中通過前面介紹的在終端中通過killkill命令產(chǎn)生信號的方法,原理主要是命令產(chǎn)生信號的方法,原理主要是killkill命令調(diào)用了命令調(diào)用了kill()kill()函數(shù)實現(xiàn)了這個功能。函數(shù)實現(xiàn)了這個功能。kill()kill()函數(shù)主要用于向指定的進程或進程組發(fā)送信號,該函數(shù)的定義形式為:函數(shù)主要用于向指定的進程或進
6、程組發(fā)送信號,該函數(shù)的定義形式為:#include#include#include#includeInt kill(pid_t pid,int sig);Int kill(pid_t pid,int sig);參數(shù)參數(shù)pidpid為進程號或進程組號;參數(shù)為進程號或進程組號;參數(shù)sigsig為要發(fā)送的信號類型的編號。為要發(fā)送的信號類型的編號。參數(shù)參數(shù)pidpid的取值范圍不同,發(fā)送的信號觸發(fā)的事件也是不同的,其取值范圍如下:的取值范圍不同,發(fā)送的信號觸發(fā)的事件也是不同的,其取值范圍如下: pid=0pid=0:將信號發(fā)送到當(dāng)前進程所在的進程組里的每一個進程。:將信號發(fā)送到當(dāng)前進程所在的進程組里的
7、每一個進程。 pid=-1pid=-1:將信號發(fā)送給除了:將信號發(fā)送給除了initinit進程外的當(dāng)前進程中有權(quán)發(fā)送的所有進進程外的當(dāng)前進程中有權(quán)發(fā)送的所有進程。程。 pid-1pid-1:將信號發(fā)送給進程組(:將信號發(fā)送給進程組(-pid-pid)中的每一個進程。)中的每一個進程。 如果如果pidpid為一個有效的進程或進程組號,信號將發(fā)送給為一個有效的進程或進程組號,信號將發(fā)送給pidpid所代表的進程所代表的進程或進程組。或進程組。& &說明:如果參數(shù)說明:如果參數(shù)sigsig為為0 0,就沒有信號可以發(fā)送,但會進行錯誤檢查。,就沒有信號可以發(fā)送,但會進行錯誤檢查。raise()函數(shù)ra
8、ise()raise()函函數(shù)數(shù)主要用于主要用于將將信信號發(fā)號發(fā)送送給當(dāng)給當(dāng)前前進進程。程。raise()raise()函函數(shù)數(shù)的原型的原型為為:#include#includeInt raise(int sig);Int raise(int sig);參數(shù)參數(shù)sigsig為發(fā)送的信號類型的編號。為發(fā)送的信號類型的編號。如果函數(shù)調(diào)用成功,返回值為如果函數(shù)調(diào)用成功,返回值為0 0;如果調(diào)用失敗,返回值為非;如果調(diào)用失敗,返回值為非0 0。說明:由說明:由raise()raise()函數(shù)的功能可以知道,使用函數(shù)的功能可以知道,使用kill()kill()函數(shù)也函數(shù)也可以實現(xiàn)這一功能,如可以實現(xiàn)這一
9、功能,如kill(getpid(),sig)kill(getpid(),sig)。alarm()函數(shù)alarm()alarm()函函數(shù)數(shù)主要用于主要用于為發(fā)為發(fā)送的信送的信號設(shè)號設(shè)定一定一個時間個時間警告,使系警告,使系統(tǒng)統(tǒng)在在設(shè)設(shè)定的定的時間時間之后之后發(fā)發(fā)送信送信號號。alarm()alarm()函函數(shù)數(shù)的原型的原型為為:#include#includeunsigned int alarm(unsigned int seconds);unsigned int alarm(unsigned int seconds);參數(shù)參數(shù)secondsseconds為設(shè)定的時間值。如果為設(shè)定的時間值。如果
10、secondsseconds設(shè)置為設(shè)置為0 0值,那么值,那么alarm()alarm()函數(shù)設(shè)置的警告時鐘將無效。函數(shù)設(shè)置的警告時鐘將無效。alarm()alarm()函數(shù)安排在函數(shù)安排在secondsseconds時間之后,發(fā)送一個信號時間之后,發(fā)送一個信號SIGALRMSIGALRM給進程。在默認(rèn)的情況下,進程接收到給進程。在默認(rèn)的情況下,進程接收到SIGALRMSIGALRM信號會終止運行信號會終止運行。如果不希望終止進程,可以在進程捕獲到該信號后修改默認(rèn)的。如果不希望終止進程,可以在進程捕獲到該信號后修改默認(rèn)的處理函數(shù)。處理函數(shù)。調(diào)用調(diào)用alarm()alarm()函數(shù)后,之前設(shè)置的
11、任何警告時鐘都取消。函數(shù)后,之前設(shè)置的任何警告時鐘都取消。標(biāo)題捕捉信號本講大綱:signal()signal()函函數(shù)數(shù)sigaction()sigaction()函函數(shù)數(shù)signal()函數(shù)在前面信號的介紹中,了解到有3種對信號的處理方法,一種是系統(tǒng)對信號的默認(rèn)處理方法;一種是忽略信號;還有一種是捕獲信號。其實對于忽略信號和捕獲信號,都是修改系統(tǒng)默認(rèn)信號的處理方法。在Linux系統(tǒng)中,可以使用signal()函數(shù)和sigaction()函數(shù)對默認(rèn)的信號處理方法進行修改,接下來對這兩個函數(shù)進行詳細(xì)講解。11.3.1 signal()函數(shù)signal()函數(shù)用于修改某個信號的處理方法,該函數(shù)的定
12、義形式如下:#includetypedef void(*sogjamd;er_t)(int);sighandler_t signal(int signum,sighandler_t handler);參數(shù)signum代表信號類型的編號;參數(shù)handler代表指向信號新的處理方法的指針,如果指針指向一個函數(shù),那么捕捉到signum信號時,會執(zhí)行這個特殊函數(shù)處理信號;參數(shù)handler還可以設(shè)置為SIG_IGN或SIG_DFL,SIG_IGN代表忽略該信號,而SIG_DFL代表采用默認(rèn)的處理方法。使用一個自己定義的特殊函數(shù)作為信號的處理方法,這種處理信號的方法叫做“捕捉信號”。U注意:在系統(tǒng)提供的
13、信號類型中,SIGKILL和SIGSTOP信號不能被捕獲或者忽略。signal()函數(shù)調(diào)用成功時,返回先前的信號,處理調(diào)用的函數(shù)指針;調(diào)用失敗時,返回SIG_ERR。例11.1 結(jié)合前面介紹的產(chǎn)生信號的函數(shù),產(chǎn)生不同的信號,通過signal()函數(shù)捕捉信號,掌握signal()函數(shù)的使用方法。(實例位置:光盤TMsl111)#include#include#includevoid sigint(int sig);void sigcont(int sig);int main(void)char a100;if(signal(SIGINT,&sigint)=SIG_ERR)/修改SIGINT信號的
14、處理方法為sigint()函數(shù)perror(sigint signal error!);sigaction()函數(shù)sigaction()函數(shù)主要用于讀取和修改指定信號的處理動作。該函數(shù)的定義形式為:#includeInt sigaction(int signum,const struct sigaction *act,struct sigaction *oldact);參數(shù)signum表示要捕獲信號類型的編號,參數(shù)act和oldact都是指向sigaction結(jié)構(gòu)體類型的指針。參數(shù)act表示需要修改的指定的新的處理動作,而該信號的原有處理動作保存到參數(shù)oldact指向的緩沖區(qū)中。U注意:如果兩
15、個sigaction結(jié)構(gòu)體類型的指針act和oldact都指向空,則兩個指針參數(shù)不會實現(xiàn)上述功能。結(jié)構(gòu)體類型sigaction的定義形式如下:struct sigactionvoid(*sa_handler)(int);void(*sa_sigaction)(int ,siginfo_t *,void *);sigset_t sa_mask;int sa_flags;void(*sa_restorer)(void);如果將上述結(jié)構(gòu)體中的成員sa_handler設(shè)置為SIG_IGN,表示忽略信號;設(shè)置為SIG_DFL,表示執(zhí)行系統(tǒng)默認(rèn)的處理動作;設(shè)置為一個函數(shù)指針的話,表示用自定義處理函數(shù)捕捉信
16、號,也可以稱之為向內(nèi)核注冊了一個信號處理函數(shù)。這個自定義的信號處理函數(shù)的返回值為void,可以傳遞一個int參數(shù),表示要處理的信號類型的編號,這樣就可以通過調(diào)用一個函數(shù)執(zhí)行多種信號的處理動作。只是這個函數(shù)并不是被主函數(shù)main()所調(diào)用而是被系統(tǒng)所調(diào)用。例11.2 調(diào)用sigaction()函數(shù)修改SIGINT信號的處理方法,修改為顯示接收到的信號編號,并累加計時,直到接收到下一個信號的到來。(實例位置:光盤TMsl112)程序的代碼如下:#include #include #include int i=0;標(biāo)題信號的阻塞本講大綱:sigprocmask()sigprocmask()函函數(shù)數(shù)s
17、igsuspend()sigsuspend()函函數(shù)數(shù)sigpending()sigpending()函函數(shù)數(shù)sigprocmask()函數(shù)在前面介紹信號處理時,提到了信號的處理并沒有那么的簡單,而是有的時候進程并不希望被突如在前面介紹信號處理時,提到了信號的處理并沒有那么的簡單,而是有的時候進程并不希望被突如其來的信號中斷當(dāng)前的執(zhí)行,也不希望信號從此被忽略掉,而是希望過一段時間之后再去處理這個其來的信號中斷當(dāng)前的執(zhí)行,也不希望信號從此被忽略掉,而是希望過一段時間之后再去處理這個信號,這種情況下,可以使用阻塞信號的方法來實現(xiàn)。能夠?qū)崿F(xiàn)信號阻塞的操作有信號,這種情況下,可以使用阻塞信號的方法來實
18、現(xiàn)。能夠?qū)崿F(xiàn)信號阻塞的操作有3 3個系統(tǒng)調(diào)用函個系統(tǒng)調(diào)用函數(shù),分別是數(shù),分別是sigprocmask()sigprocmask()函數(shù)、函數(shù)、sigsuspend()sigsuspend()函數(shù)和函數(shù)和sigpending()sigpending()函數(shù),下面分別對它們進行詳函數(shù),下面分別對它們進行詳細(xì)講解。細(xì)講解。說明:信號屏蔽字就是進程中被阻塞的信號集,這些信號不能發(fā)送給該進程,它們在該說明:信號屏蔽字就是進程中被阻塞的信號集,這些信號不能發(fā)送給該進程,它們在該進程中被進程中被 屏蔽屏蔽 了,也就是被阻塞了。了,也就是被阻塞了。11.4.1 sigprocmask()函數(shù)sigprocma
19、sk()sigprocmask()函函數(shù)數(shù)可用于可用于檢測檢測和改和改變進變進程的信程的信號號掩掩碼碼,該該函函數(shù)數(shù)的定的定義義形式如下:形式如下:#include#includeInt sigprocmask(int how,const sigset_t Int sigprocmask(int how,const sigset_t * *newset,sigset_t newset,sigset_t * *oldset);oldset);sigprocmask()sigprocmask()函函數(shù)數(shù)有有3 3個參數(shù)個參數(shù),參數(shù)參數(shù)howhow表示修改信表示修改信號屏號屏蔽字的方式;蔽字的方式;
20、參數(shù)參數(shù)newsetnewset表示把表示把這個這個信信號號集集設(shè)為設(shè)為新的新的當(dāng)當(dāng)前信前信號屏號屏蔽字,如果蔽字,如果為為NULLNULL則則不改不改變變;參數(shù)參數(shù)oldsetoldset表示保存表示保存進進程程舊舊的信的信號屏號屏蔽字蔽字,如果,如果為為NULLNULL則則不保存。不保存。參數(shù)參數(shù)howhow的取的取值值不同不同帶來帶來的操作行的操作行為為也不同,也不同,該參數(shù)該參數(shù)的可的可選值選值如下:如下:SIG_BLOCKSIG_BLOCK:該值該值代表的功能是代表的功能是將將newsetnewset所指向的信所指向的信號號集中所包含的信集中所包含的信號號加到加到當(dāng)當(dāng)前的信前的信號號
21、掩掩碼碼中中作作為為新的信新的信號屏號屏蔽字。蔽字。SIG_UNBLOCKSIG_UNBLOCK:將參數(shù)將參數(shù)newsetnewset所指向的信所指向的信號號集中的信集中的信號從當(dāng)號從當(dāng)前的信前的信號號掩掩碼碼中移除。中移除。SIG_SETMASKSIG_SETMASK:設(shè)設(shè)置置當(dāng)當(dāng)前信前信號號掩掩碼為參數(shù)碼為參數(shù)newsetnewset所指向的信所指向的信號號集中所包含的信集中所包含的信號號。函數(shù)調(diào)用成功則返回函數(shù)調(diào)用成功則返回0 0;出錯則返回;出錯則返回-1-1。注意:注意:sigprocmask()sigprocmask()函數(shù)只為單線程定義的,在多線程中要使用函數(shù)只為單線程定義的,在
22、多線程中要使用pthread_sigmaskpthread_sigmask變量,在使變量,在使用之前需要聲明和初始化。用之前需要聲明和初始化。sigsuspend()函數(shù)sigsuspend()sigsuspend()函函數(shù)數(shù)主要主要實現(xiàn)實現(xiàn)了等待一了等待一個個信信號號的到的到來來,即,即將當(dāng)將當(dāng)前前進進程掛起。程掛起。該該函函數(shù)數(shù)的定的定義義形式如下:形式如下:#include#includeInt sigsuspend(const sigset_t Int sigsuspend(const sigset_t * *mask);mask);參數(shù)參數(shù)maskmask是一個是一個sigset_t
23、sigset_t結(jié)構(gòu)體類型的指針,指向一個信號集,結(jié)構(gòu)體類型的指針,指向一個信號集,當(dāng)函數(shù)當(dāng)函數(shù)sigsuspend()sigsuspend()函數(shù)被調(diào)用時,參數(shù)函數(shù)被調(diào)用時,參數(shù)maskmask所指向的信號集中所指向的信號集中的信號被復(fù)制給信號掩碼。隨后,進程會被掛起,直到信號被捕的信號被復(fù)制給信號掩碼。隨后,進程會被掛起,直到信號被捕捉到,執(zhí)行信號相應(yīng)的處理方法返回時,該函數(shù)才會返回,此時捉到,執(zhí)行信號相應(yīng)的處理方法返回時,該函數(shù)才會返回,此時,信號掩碼恢復(fù)為函數(shù)調(diào)用前的值。,信號掩碼恢復(fù)為函數(shù)調(diào)用前的值。sigpending()函數(shù)在調(diào)用信號屏蔽的相關(guān)函數(shù)后,被屏蔽的信號對于調(diào)用進程是阻
24、塞的,不能發(fā)送給調(diào)用進程,因此是待定的(pending),而調(diào)用sigpending()函數(shù)可以取得這些阻塞的信號集。sigpending()函數(shù)的定義形式如下:#includeint sigpending(sigset_t *set);參數(shù)set為一個sigset_t類型的指針,指向一個信號集。調(diào)用sigpending()函數(shù)成功時,參數(shù)set會取得被懸掛的信號集,返回值為0;如果調(diào)用失敗,會返回-1。例11.3 調(diào)用信號阻塞函數(shù)將SIGINT信號阻塞。(實例位置:光盤TMsl113)程序代碼如下:#include #include #include #include static void
25、 sig_handler(int signo)/*自定義的信號SIGINT處理函數(shù)*/ printf(信號SIGINT 被捕捉!n );int main() sigset_t new, old, pend; if (signal(SIGINT, sig_handler) = SIG_ERR)/*注冊一個信號處理函數(shù)sig_handler*/ perror(signal); exit(1); if (sigemptyset(&new) 0)/*清空信號集*/ perror(sigemptyset); if (sigaddset(&new, SIGINT) 0)/*向new信號集中添加SIGINT
26、信號*/標(biāo)題信號處理的安全問題 在多進程通信時,開發(fā)人員通常都會考慮到每個進程運行的安全問題,信號作為進程的異步通信方式,在多進程通信時,開發(fā)人員通常都會考慮到每個進程運行的安全問題,信號作為進程的異步通信方式,在實際應(yīng)用中是相當(dāng)方便的,但是信號的使用存在一定的安全隱患。信號并不僅是在程序出現(xiàn)錯誤時才調(diào)用在實際應(yīng)用中是相當(dāng)方便的,但是信號的使用存在一定的安全隱患。信號并不僅是在程序出現(xiàn)錯誤時才調(diào)用的。有的時候開發(fā)人員也會為了實現(xiàn)某些邏輯的需求,而在程序中安裝一個信號,例如,的。有的時候開發(fā)人員也會為了實現(xiàn)某些邏輯的需求,而在程序中安裝一個信號,例如,SIGUSR1SIGUSR1(預(yù)留信(預(yù)留信
27、號)、號)、SIGRTMINSIGRTMIN(未定義)等,信號在執(zhí)行了相應(yīng)的處理函數(shù)后,剩下的程序還將正常運行,此時,開發(fā)(未定義)等,信號在執(zhí)行了相應(yīng)的處理函數(shù)后,剩下的程序還將正常運行,此時,開發(fā)人員容易被產(chǎn)生的信號進入另一個運行順序中,而忽略了該信號處理函數(shù)執(zhí)行時的上下文。人員容易被產(chǎn)生的信號進入另一個運行順序中,而忽略了該信號處理函數(shù)執(zhí)行時的上下文。 由于信號是用來處理異步事件的,也就是說,信號處理函數(shù)執(zhí)行的上下文所實現(xiàn)的功能是不確定的,例由于信號是用來處理異步事件的,也就是說,信號處理函數(shù)執(zhí)行的上下文所實現(xiàn)的功能是不確定的,例如,一個運行中的程序在調(diào)用某個庫函數(shù)時,可能會被突如其來的信號中斷,庫函數(shù)會提前出錯返回,進而如,一個運行中的程序在調(diào)用某個庫函數(shù)時,可能會被突如其來的信號中斷,庫函數(shù)會提前出錯返回,進而轉(zhuǎn)去執(zhí)行該信號的處理函數(shù)。對于轉(zhuǎn)去執(zhí)行該信號的處理函數(shù)。對于alarm()alarm(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鞋底行業(yè)企業(yè)年終總結(jié)
- 皮帶縫勾縫施工方案
- 昆明藝術(shù)職業(yè)學(xué)院《臨床醫(yī)學(xué)概論A2》2023-2024學(xué)年第一學(xué)期期末試卷
- 榆林能源科技職業(yè)學(xué)院《EVC企業(yè)價值創(chuàng)造》2023-2024學(xué)年第二學(xué)期期末試卷
- 廊坊衛(wèi)生職業(yè)學(xué)院《中國畫史論導(dǎo)讀》2023-2024學(xué)年第二學(xué)期期末試卷
- 南華大學(xué)《Andoid應(yīng)用開發(fā)A》2023-2024學(xué)年第二學(xué)期期末試卷
- 煙臺城市科技職業(yè)學(xué)院《中醫(yī)臨床思維訓(xùn)練》2023-2024學(xué)年第二學(xué)期期末試卷
- 長春人文學(xué)院《集散系統(tǒng)概論》2023-2024學(xué)年第二學(xué)期期末試卷
- 新疆科技職業(yè)技術(shù)學(xué)院《醫(yī)藥倫理學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 南昌工學(xué)院《數(shù)據(jù)組織與管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 農(nóng)村電工安全培訓(xùn)課件
- 競彩考試試題及答案
- 2025年山東省濟南中考一模英語試題(含答案)
- 小鵬P7+用戶調(diào)研報告
- 2025年度礦山買賣中介服務(wù)傭金結(jié)算協(xié)議
- 重慶市建筑安全員C證考試題庫
- 繪本故事《小鯉魚跳龍門》課件
- TCACM 1554-2023 肛漏中醫(yī)診療指南
- 直播間搭建培訓(xùn)
- 刑事訴訟中電子數(shù)據(jù)凍結(jié)的性質(zhì)及其法律規(guī)制
- 2025年重慶三支一扶招募469人高頻重點提升(共500題)附帶答案詳解
評論
0/150
提交評論