進(jìn)程間通信軟帝信息科技_第1頁(yè)
進(jìn)程間通信軟帝信息科技_第2頁(yè)
進(jìn)程間通信軟帝信息科技_第3頁(yè)
進(jìn)程間通信軟帝信息科技_第4頁(yè)
進(jìn)程間通信軟帝信息科技_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

linux進(jìn)程間通信信號(hào)共享內(nèi)存消息隊(duì)列軟帝信息科技http

信號(hào)通信信號(hào)概述信號(hào)是

中斷。信號(hào)(signal)機(jī)制是Unix系統(tǒng)中最為古老的進(jìn)程之間的通信機(jī)制。它用于在一個(gè)或多個(gè)進(jìn)程之間傳遞異步信號(hào)。很多條件可以產(chǎn)生一個(gè)信號(hào)。當(dāng)用戶按某些終端鍵時(shí),產(chǎn)生信號(hào)。在終端上按DELETE鍵通常產(chǎn)生中斷信號(hào)(SIGINT)。這是停止一個(gè)已失去控制程序的方法。硬件異常產(chǎn)生信號(hào):除數(shù)為0、無(wú)效的

等等。這些條件通常由硬件檢測(cè)到,并將其通知內(nèi)核。然后內(nèi)核為該條件發(fā)生時(shí)正在運(yùn)行的進(jìn)程產(chǎn)生適當(dāng)?shù)男盘?hào)。例如,對(duì)執(zhí)行一個(gè)無(wú)效

訪問(wèn)的進(jìn)程產(chǎn)生一個(gè)SIGSEGV。軟帝信息科技http

進(jìn)程用kill(2)函數(shù)可將信號(hào)發(fā)送給另一個(gè)進(jìn)程或進(jìn)程組。自然,有些限制:接收信號(hào)進(jìn)程和發(fā)送信號(hào)進(jìn)程的所有者必須相同,或發(fā)送信號(hào)進(jìn)程的所有者必須是超級(jí)用戶。用戶可用kill(

1

)命令將信號(hào)發(fā)送給其他進(jìn)程。此程序是kill函數(shù)的界面。常用此命令終止一個(gè)失控的 進(jìn)程。當(dāng)檢測(cè)到某種條件已經(jīng)發(fā)生,并將其通知有關(guān)進(jìn)程時(shí)也產(chǎn)生信號(hào)。這里并不是指硬件產(chǎn)生條件(如被0除),而是條件。例如SIGURG(在網(wǎng)絡(luò)連接上傳來(lái)非規(guī)定波特率的數(shù)據(jù))、SIGPIPE(在管道的讀進(jìn)程已終止后一個(gè)進(jìn)程寫此管道),以及SIGALRM(進(jìn)程所設(shè)置的鬧鐘時(shí)間已經(jīng)超時(shí))。軟帝信息科技http

內(nèi)核為進(jìn)程生產(chǎn)信號(hào),來(lái)響應(yīng)不同的事件,這些事件就是信號(hào)源。主要的信號(hào)源如下:異常:進(jìn)程運(yùn)行過(guò)程中出現(xiàn)異常;其它進(jìn)程:一個(gè)進(jìn)程可以向另一個(gè)或一組進(jìn)程發(fā)送信號(hào);終端中斷:Ctrl-C,Ctrl-\等;作業(yè)控制:前臺(tái)、

進(jìn)程的管理;分

:CPU超時(shí)或文件大小突破限制;通知:通知進(jìn)程某事件發(fā)生,如I/O就緒等;:計(jì)時(shí)器到期。軟帝信息科技http

Linux中的信號(hào):1)

SIGHUP5)

SIGTRAP9)

SIGKILL13)

SIGPIPE17)

SIGCHLD21)

SIGTTIN25)

SIGXFSZ29)

SIGIO3)

SIGQUIT7)

SIGBUS11)

SIGSEGV4)

SIGILL8)

SIGFPE12)

SIGUSR22)

SIGINT6)

SIGABRT10)

SIGUSR114)

SIGALRM18)

SIGCONT22)

SIGTTOU15)

SIGTERM19)

SIGSTOP23)

SIGURG16)

SIGSTKFLT20)

SIGTSTP24)

SIGXCPU26)

SIGVTALRM 27)

SIGPROF30)

SIGPWR 31)

SIGSYS28)

SIGWINCHKill-l

命令顯示系統(tǒng)信號(hào)1-31不可靠信號(hào)34-64

可靠信號(hào)可靠信號(hào)支持多次

,排隊(duì)處理軟帝信息科技http

下面是幾個(gè)常見(jiàn)的信號(hào)。SIGHUP:從終端上發(fā)出的結(jié)束信號(hào);SIGINT:來(lái)自鍵盤的中斷信號(hào)(Ctrl-C);SIGQUIT:來(lái)自鍵盤的退出信號(hào)(Ctrl-\);SIGFPE:浮點(diǎn)異常信號(hào)(例如浮點(diǎn)運(yùn)算溢出);SIGKILL:該信號(hào)結(jié)束接收信號(hào)的進(jìn)程;SIGALRM:進(jìn)程的定時(shí)器到期時(shí),發(fā)送該信號(hào);SIGTERM:kill

命令發(fā)出的信號(hào);SIGCHLD:標(biāo)識(shí)子進(jìn)程停止或結(jié)束的信號(hào);SIGSTOP:來(lái)自鍵盤(Ctrl-Z)或調(diào)試程序的停止執(zhí)行信號(hào)…………軟帝信息科技http

信號(hào)生命周期軟帝信息科技http

可以要求系統(tǒng)在某個(gè)信號(hào)出現(xiàn)時(shí)按照下列三種方式中的一種進(jìn)行操作。忽略此信號(hào)。大多數(shù)信號(hào)都可使用這種方式進(jìn)行處理,但有兩種信號(hào)卻決不能被忽略。它們是:SIGKILL和SIGSTOP。這兩種信號(hào)不能被忽略的原因是:它們向超級(jí)用戶提供一種使進(jìn)程終止或停止的可靠方法。另外,如果忽略某些由硬件異常產(chǎn)生的信號(hào)(例如

存儲(chǔ)

或除以0),則進(jìn)程的行為是未定義的。捕捉信號(hào)。為了做到這一點(diǎn)要通知內(nèi)核在某種信號(hào)發(fā)生時(shí),調(diào)用一個(gè)用戶函數(shù)。在用戶函數(shù)中,可執(zhí)行用戶希望對(duì)這種事件進(jìn)行的處理。如果捕捉到SIGCHLD信號(hào),則表示子進(jìn)程已經(jīng)終止,所以此信號(hào)的捕捉函數(shù)可以調(diào)用waitpid以取得該子進(jìn)程的進(jìn)程ID以及它的終止?fàn)顟B(tài)。執(zhí)行系統(tǒng)默認(rèn)動(dòng)作。對(duì)大多數(shù)信號(hào)的系統(tǒng)默認(rèn)動(dòng)作是終止該進(jìn)程。軟帝信息科技http

每一個(gè)信號(hào)都有一個(gè)缺省動(dòng)作,它是當(dāng)進(jìn)程沒(méi)有給這個(gè)信號(hào)指定處理程序時(shí),內(nèi)核對(duì)信號(hào)的處理。有5種缺省的動(dòng)作:異常終止(abort):在進(jìn)程的當(dāng)前

下,把進(jìn)程的地址空間內(nèi)容、寄存器內(nèi)容保存到一個(gè)叫做core的文件中,而后終止進(jìn)程。退出(exit):不產(chǎn)生core文件,直接終止進(jìn)程。忽略(ignore):忽略該信號(hào)。停止(stop):掛起該進(jìn)程。繼續(xù)(continue):如果進(jìn)程被掛起,則恢復(fù)進(jìn)程的運(yùn)行。否則,忽略信號(hào)。軟帝信息科技http

信號(hào)發(fā)送與捕捉kill()和raise()kill()不僅可以中止進(jìn)程,也可以向進(jìn)程發(fā)送其他信號(hào)。與kill函數(shù)不同的是,raise()函數(shù)運(yùn)行向進(jìn)程自身發(fā)送信號(hào)。#include

<sys/types.h>#include

<signal.h>int

kill(pid_t

pid,

int

signo)

;int

raise(int

signo)

;兩個(gè)函數(shù)返回:若成功則為0,若出錯(cuò)則為-1。軟帝信息科技http

kill的pid參數(shù)有四種不同的情況:pid>0

將信號(hào)傳給進(jìn)程識(shí)別碼為pid

的進(jìn)程。pid=0

將信號(hào)傳給和目前進(jìn)程相同進(jìn)程組的所有進(jìn)程pid=-1

將信號(hào)廣播傳送給系統(tǒng)內(nèi)所有的進(jìn)程pid<0

將信號(hào)傳給進(jìn)程組識(shí)別碼為pid絕對(duì)值的所有進(jìn)程kill()實(shí)例見(jiàn):kill.c軟帝信息科技http

alarm和pause函數(shù)使用alarm函數(shù)可以設(shè)置一個(gè)時(shí)間值(鬧鐘時(shí)間),在將來(lái)的某個(gè)時(shí)刻該時(shí)間值會(huì)被超過(guò)。當(dāng)所設(shè)置的時(shí)間值被超過(guò)后,產(chǎn)生SIGALRM信號(hào)。如果不忽略或不捕捉此信號(hào),則其默認(rèn)動(dòng)作是終止該進(jìn)程。#include

<unistd.h>unsigned

int

alarm(unsigned

int

seconds)

;返回:0或以前設(shè)置的鬧鐘時(shí)間的余留秒數(shù)軟帝信息科技http

參數(shù)seconds的值是秒數(shù),經(jīng)過(guò)了指定的seconds秒后會(huì)產(chǎn)生信號(hào)SIGALRM。每個(gè)進(jìn)程只能有一個(gè)鬧鐘時(shí)間。如果在調(diào)用alarm時(shí),以前已為該進(jìn)程設(shè)置過(guò)鬧鐘時(shí)間,而且它還沒(méi)有超時(shí),則該鬧鐘時(shí)間的余留值作為本次alarm函數(shù)調(diào)用的值返回。以前登記的鬧鐘時(shí)間則被新值代換。如果有以前登記的尚未超過(guò)的鬧鐘時(shí)間,而且seconds值是0,則取消以前的鬧鐘時(shí)間,其余留值仍作為函數(shù)的返回值。軟帝信息科技http

pause函數(shù)使調(diào)用進(jìn)程掛起直至捕捉到一個(gè)信號(hào)。#include

<unistd.h>int

pause(void);返回:-1,errno設(shè)置為EINTR只有執(zhí)行了一個(gè)信號(hào)處理程序并從其返回時(shí),pause才返回。實(shí)例見(jiàn):alarm.c軟帝信息科技http

信號(hào)的處理當(dāng)系統(tǒng)捕捉到某個(gè)信號(hào)時(shí),可以忽略該信號(hào)或是使用指定的處理函數(shù)來(lái)處理該信號(hào),或者使用系統(tǒng)默認(rèn)的方式。信號(hào)處理的主要方法有兩種,一種是使用簡(jiǎn)單的signal函數(shù),另一種是使用信號(hào)集函數(shù)組。Signal函數(shù)主要用于32種非實(shí)時(shí)信號(hào)處理。軟帝信息科技http

signal()#include

<signal.h>void

(*signal

(int

signo,

void(*func)(int)))(int)返回:成功則為以前的信號(hào)處理配置,若出錯(cuò)則為SIG_ERRfunc的值是:(a)常數(shù)SIG_IGN,或(b)常數(shù)SIG_DFL,或

(c)當(dāng)接到此信號(hào)后要調(diào)用的函數(shù)的地址。如果指定SIG_IGN,則向內(nèi)核表示忽略此信號(hào)(有兩個(gè)信號(hào)SIGKILL和SIGSTOP不能忽略)。如果指定SIG_DFL,則表示接到此信號(hào)后的動(dòng)作是系統(tǒng)默認(rèn)動(dòng)作。當(dāng)指定函數(shù)地址時(shí),

稱此為捕捉此信號(hào)。 稱此函數(shù)為信號(hào)處理程序(signalhandler)或信號(hào)捕捉函數(shù)(signal-catching

function)。軟帝信息科技http

軟帝信息科技http

signal函數(shù)原型太復(fù)雜了,如果使用下面的typedef,則可使其簡(jiǎn)化。typedef

void

sign(int);sign

*signal(int,

handler

*);實(shí)例見(jiàn):mysignal.c軟帝信息科技http

信號(hào)集函數(shù)組需要有一個(gè)能表示多個(gè)信號(hào)——信號(hào)集(signal

set)的數(shù)據(jù)類型。將在sigprocmask()這樣的函數(shù)中使用這種數(shù)據(jù)類型,以告訴內(nèi)核不允許發(fā)生該信號(hào)集中的信號(hào)。信號(hào)集函數(shù)組包含幾大模塊:創(chuàng)建函數(shù)集、登記信號(hào)集、檢測(cè)信號(hào)集。軟帝信息科技http

信號(hào)操作一般流程SigemptysetSigaddset…Sigprocmask…定義信號(hào)集設(shè)置

位sa_masksa_handlersigaction…Sigpending…定義信號(hào)處理函數(shù)測(cè)試信號(hào)軟帝信息科技http

創(chuàng)建函數(shù)集#include

<signal.h>int

sigemptyset(sigset_t

*

set)

;int

sigfillset(sigset_t*

set)

;int

sigaddset(sigset_t

*

set,int

signo)

;int

sigdelset(sigset_t

*

set,int

signo);四個(gè)函數(shù)返回:若成功則為0,若出錯(cuò)則為-1int

sigismember(const

sigset_t

*

set,

intsigno)

;返回:若真則為1,若假則為0。軟帝信息科技http

sigemptyset:初始化信號(hào)集合為空。sigfillset:初始化信號(hào)集合為所有信號(hào)的集合。sigaddset:將指定信號(hào)添加到現(xiàn)存集中。sigdelset:從信號(hào)集中刪除指定信號(hào)。sigismember:查詢指定信號(hào)是否在信號(hào)集合中。軟帝信息科技http

登記信號(hào)集登記信號(hào)處理機(jī)主要用于決定進(jìn)程如何處理信號(hào)。首先要判斷出當(dāng)前進(jìn)程阻塞能不能傳遞給該信號(hào)的信號(hào)集。這首先使用sigprocmask函數(shù)判斷檢測(cè)或更改 字,然后使用sigaction函數(shù)改變進(jìn)程接受到特定信號(hào)之后的行為。軟帝信息科技http

一個(gè)進(jìn)程的字可以規(guī)定當(dāng)前阻塞而不能遞送給該進(jìn)程的信號(hào)集。調(diào)用函數(shù)sigprocmask可以檢測(cè)或更改(或兩者)進(jìn)程的字。#

include

<signal.h>int

sigprocmask(int

how,

const

sigset_t*

set,

sigset_t

*

oset)

;返回:若成功則為0,若出錯(cuò)則為-1oset是非空指針,進(jìn)程的當(dāng)前 字通過(guò)oset返回。其次,若set是一個(gè)非空指針,則參數(shù)how指示如何修改當(dāng)前 字。軟帝信息科技http

字的方法,how參數(shù)用sigprocmask更改當(dāng)前設(shè)定:SIG_BLOCK該進(jìn)程新的字是其當(dāng)前希望阻塞的附字和set指向信號(hào)集的并集。set包含了加信號(hào)。SIG_UNBLOCK該進(jìn)程新的字是其當(dāng)前信號(hào)字和set所指向信號(hào)集的交集。set包含了 希望解除阻塞的信號(hào)。SIG_SETMASK該進(jìn)程新的

是set指向的值。如果set是個(gè)空指針,則不改變?cè)撨M(jìn)程的 字,how的值也無(wú)意義。軟帝信息科技http

sigaction函數(shù)的功能是檢查或修改(或兩者)與指定信號(hào)相關(guān)聯(lián)的處理動(dòng)作。此函數(shù)取代了UNIX早期版本使用的signal函數(shù)。#include

<signal.h>int

sigaction(int

signo,

const

struct

sigaction

*act,structsigaction

*

oact)

;返回:若成功則為0,若出錯(cuò)則為-1參數(shù)signo是要檢測(cè)或修改具體動(dòng)作的信號(hào)的數(shù)。若act指針?lè)强眨瑒t要修改其動(dòng)作。如果oact指針?lè)强眨瑒t系統(tǒng)返回該信號(hào)的原先動(dòng)作。此函數(shù)使用下列結(jié)構(gòu):struct

sigaction

{void

(*sa_handler)(int

signo);sigset_t

sa_mask;int

sa_flags;void

(*sa_restore);

}

;軟帝信息科技http

sa_handler是一個(gè)函數(shù)指針,指定信號(hào)關(guān)聯(lián)函數(shù),可以是自定義處理函數(shù),還可以SIG_DFL或SIG_IGN。sa_mask是一個(gè)信號(hào)集,它可以指定在信號(hào)處理程序執(zhí)行過(guò)程中哪些信號(hào)應(yīng)當(dāng)被阻塞。sa_flags中包含許多標(biāo)志位,是對(duì)信號(hào)進(jìn)行處理的各種選項(xiàng)。具體如下:SA_NODEFER\SA_NOMASK:當(dāng)捕捉到此信號(hào)時(shí),在執(zhí)行其信號(hào)捕捉函數(shù)時(shí),系統(tǒng)不會(huì)自動(dòng)阻塞此信號(hào)。SA_NOCLDSTOP:進(jìn)程忽略子進(jìn)程產(chǎn)生的任何SIGSTOP、SIGTSTP、SIGTTIN和SIGTTOU信號(hào)SA_RESTART:可讓重啟的系統(tǒng)調(diào)用重新起作用。SA_ONESHOT\SA_RESETHAND:自定義信號(hào)只執(zhí)行一次,在執(zhí)行完畢后恢復(fù)信號(hào)的系統(tǒng)默認(rèn)動(dòng)作。軟帝信息科技http

檢測(cè)信號(hào)集檢測(cè)信號(hào)是信號(hào)處理的后續(xù)步驟,但不是必須的。sigpending函數(shù)運(yùn)行進(jìn)程檢測(cè)“未決”信號(hào)(進(jìn)程不清楚他的存在),并進(jìn)一步?jīng)Q定對(duì)他們做何處理。sigpending返回對(duì)于調(diào)用進(jìn)程被阻塞不能遞送和當(dāng)前未決的信號(hào)集。#include

<signal.h>int

sigpending(sigset_t

*

set)

;返回:若成功則為0,若出錯(cuò)則為-1信號(hào)集實(shí)例見(jiàn):sigaction.c軟帝信息科技http

共享內(nèi)存共享內(nèi)存區(qū)域是被多個(gè)進(jìn)程共享的一部分物理內(nèi)存。如果多個(gè)進(jìn)程都把該內(nèi)存區(qū)域到自己的虛擬地址空間,則這些進(jìn)程就都可以直接該共享內(nèi)存區(qū)域,從而可以通過(guò)該區(qū)域進(jìn)行通信。共享內(nèi)存是進(jìn)程間共享數(shù)據(jù)的一種最快的方法,一個(gè)進(jìn)程向共享內(nèi)存區(qū)域?qū)懭肓藬?shù)據(jù),共享這個(gè)內(nèi)存區(qū)域的所有進(jìn)程就可以立刻看到其中的內(nèi)容。軟帝信息科技http

進(jìn)程一進(jìn)程二共享內(nèi)存共享內(nèi)存原理示意圖軟帝信息科技http

共享內(nèi)存實(shí)現(xiàn)分為兩個(gè)步驟:一、創(chuàng)建共享內(nèi)存,使用shmget函數(shù)。到具體二、

共享內(nèi)存,將這段創(chuàng)建的共享內(nèi)存的進(jìn)程空間去,使用shmat函數(shù)。軟帝信息科技http

系統(tǒng)調(diào)用:shmget();原型:int

shmget

(

key_t

key,

int

size,

intshm

);返回值:如果成功,返回共享內(nèi)存段標(biāo)識(shí)符。如果失敗,則返回-1:errno=EINVAL(無(wú)效的內(nèi)存段大小)EEXIST(內(nèi)存段已經(jīng)存在,無(wú)法創(chuàng)建)EIDRM(內(nèi)存段已經(jīng)被刪除)ENOENT(內(nèi)存段不存在)EACCES(權(quán)限不夠)ENOMEM(沒(méi)有足夠的內(nèi)存來(lái)創(chuàng)建內(nèi)存段)軟帝信息科技http

軟帝信息科技http

系統(tǒng)調(diào)用:shmat();原型:int

shmat

(

int

shmid,

char

*shmaddr,

int

shm

);返回值:如果成功,則返回共享內(nèi)存段連接到進(jìn)程中的地址。如果失敗,則返回-1:errno=EINVAL(無(wú)效的IPC

ID

值或者無(wú)效的地址)ENOMEM(沒(méi)有足夠的內(nèi)存)EACCES(存取權(quán)限不夠)軟帝信息科技http

軟帝信息科技http

當(dāng)一個(gè)進(jìn)程不在需要共享的內(nèi)存段時(shí),它將會(huì)把內(nèi)存段從其地址空間中脫離。系統(tǒng)調(diào)用:shmdt();調(diào)用原型:int

shmdt(char

*shmaddr);返回值:如果失敗,則返回-1:errno=EINVAL(無(wú)效的連接地址)共享內(nèi)存實(shí)例見(jiàn):shmadd.c軟帝信息科技http

軟帝信息科技http

消息隊(duì)列消息隊(duì)列就是消息的一個(gè)鏈表,它允許一個(gè)或多個(gè)進(jìn)程向它寫消息,一個(gè)或多個(gè)進(jìn)程從中讀消息。具有一定的FIFO的特性,但是可實(shí)現(xiàn)消息的隨即查詢。這些消息存在于內(nèi)核

中,由“隊(duì)列ID”來(lái)標(biāo)識(shí)。消息隊(duì)列的實(shí)現(xiàn)包括創(chuàng)建和打開(kāi)隊(duì)列、添加消息、

消息和控制消息隊(duì)列這四種操作。msgget:創(chuàng)建和打開(kāi)隊(duì)列,其消息數(shù)量受系統(tǒng)限制。msgsnd:添加消息,將消息添加到消息隊(duì)列尾部。msgrcv:

消息,從消息隊(duì)列中取走消息。msgctl:控制消息隊(duì)列。軟帝信息科技http

int

msgget

(key_tkey,

int

flag)key:返回新的或已有隊(duì)列的ID,IPC_PRIVATEint

msgsnd

(int

msqid,

struct

msgbuf

*msgp,

size_tmsgsz,

int

flag)其中:msqid是消息隊(duì)列的隊(duì)列ID;msgp是消息內(nèi)容所在的緩沖區(qū);msgsz是消息的大??;msg

是標(biāo)志,IPC_NOWAIT若消息并沒(méi)有立交發(fā)送而調(diào)用進(jìn)程會(huì)立即返回。軟帝信息科技http

軟帝信息科技http

struct

msgbuf{/*

type

of

message

*//*

message

text

*/long

mtype;char

mtext[1];};軟帝信息科技http

3限公司http

int

msgr

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論