




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、嵌入式應(yīng)用程序設(shè)計嵌入式應(yīng)用程序設(shè)計第五章 嵌入式文件I/O編程2 5.1 Linux系統(tǒng)調(diào)用及用戶編程接口5.2 Linux文件I/O系統(tǒng)概述5.3 底層文件I/O操作5.4 嵌入式Linux串口應(yīng)用編程5.5 標(biāo)準(zhǔn)I/O編程5.6 實(shí)驗(yàn)內(nèi)容5.7 小結(jié)5.8 思考與練習(xí)本章課程:本章課程:35.1 Linux系統(tǒng)調(diào)用及用戶編程接口5.1.1 系統(tǒng)調(diào)用5.1.2 用戶編程接口5.1.3 系統(tǒng)命令45.1.1 系統(tǒng)調(diào)用 系統(tǒng)調(diào)用是指操作系統(tǒng)提供給用戶程序調(diào)用的一組“特殊”接口,用戶程序可以通過這組“特殊”接口獲得操作系統(tǒng)內(nèi)核提供的服務(wù)。例如用戶可以通過進(jìn)程控制相關(guān)的系統(tǒng)調(diào)用來創(chuàng)建進(jìn)程、實(shí)現(xiàn)進(jìn)程
2、之間的通信等。 在Linux中,為了更好地保護(hù)內(nèi)核空間,將程序的運(yùn)行空間分為內(nèi)核空間和用戶空間(也就是常稱的內(nèi)核態(tài)和用戶態(tài)),它們分別運(yùn)行在不同的級別上,邏輯上是相互隔離的。 因此,用戶進(jìn)程在通常情況下不允許訪問內(nèi)核數(shù)據(jù),也無法使用內(nèi)核函數(shù),它們只能在用戶空間操作用戶數(shù)據(jù),調(diào)用用戶空間的函數(shù)。但是,在有些情況下,用戶空間的進(jìn)程需要獲得一定的系統(tǒng)服務(wù)(調(diào)用內(nèi)核空間程序),這時操作系統(tǒng)就必須利用系統(tǒng)提供給用戶的“特殊接口”系統(tǒng)調(diào)用規(guī)定用戶進(jìn)程進(jìn)入內(nèi)核空間的具體位置。進(jìn)行系統(tǒng)調(diào)用時,程序運(yùn)行空間需要從用戶空間進(jìn)入內(nèi)核空間,處理完后再返回到用戶空間。5 5.1.2 用戶編程接口在Linux中,用戶編程
3、接口(API)遵循了在Unix中最流行的應(yīng)用編程界面標(biāo)準(zhǔn)POSIX標(biāo)準(zhǔn)。POSIX標(biāo)準(zhǔn)是由IEEE和ISO/IEC共同開發(fā)的標(biāo)準(zhǔn)系統(tǒng)。該標(biāo)準(zhǔn)基于當(dāng)時現(xiàn)有的Unix實(shí)踐和經(jīng)驗(yàn),描述了操作系統(tǒng)的系統(tǒng)調(diào)用編程接口(實(shí)際上就是API),用于保證應(yīng)用程序可以在源代碼一級上在多種操作系統(tǒng)上移植運(yùn)行。這些系統(tǒng)調(diào)用編程接口主要是通過C庫(libc)實(shí)現(xiàn)的。 6 5.1.3 系統(tǒng)命令系統(tǒng)命令相對API更高了一層,它實(shí)際上一個可執(zhí)行程序,它的內(nèi)部引用了用戶編程接口(API)來實(shí)現(xiàn)相應(yīng)的功能 ,它們之間的關(guān)系如圖:7 5.2 Linux文件I/O系統(tǒng)概述5.2.1 虛擬文件系統(tǒng)5.2.2 通用文件模型 5.2.3
4、Linux中文件及文件描述符85.2.1 虛擬文件系統(tǒng)Linux系統(tǒng)成功的關(guān)鍵因素之一就是具有與其他操作系統(tǒng)和諧共存的能力。Linux的文件系統(tǒng)由兩層結(jié)構(gòu)構(gòu)建。第一層是虛擬文件系統(tǒng)(VFS),第二層是各種不同的具體的文件系統(tǒng)。VFS在linux系統(tǒng)中的位置如圖:95.2.2 通用文件模型 通用的文件模型(common file model),這個模型的核心是4個對象類型,即超級塊對象(superblock object)、索引節(jié)點(diǎn)對象(inode object)、文件對象(file object)和目錄項(xiàng)對象(dentry object)。 105.2.3 Linux中文件及文件描述符 對于L
5、inux而言,所有對設(shè)備和文件的操作都是使用文件描述符來進(jìn)行的。文件描述符是一個非負(fù)的整數(shù),它是一個索引值,并指向在內(nèi)核中每個進(jìn)程打開文件的記錄表。當(dāng)打開一個現(xiàn)存文件或創(chuàng)建一個新文件時,內(nèi)核就向進(jìn)程返回一個文件描述符;當(dāng)需要讀寫文件時,也需要把文件描述符作為參數(shù)傳遞給相應(yīng)的函數(shù)。 一個進(jìn)程啟動時,都會打開3個文件:標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)出錯處理 文件描述符宏標(biāo)準(zhǔn)輸入0STDIN_FILENO 標(biāo)準(zhǔn)輸出1STDOUT_FILENO 標(biāo)準(zhǔn)出錯2STDERR_FILENO 115.3 底層文件I/O操作5.3.1 基本文件操作5.3.2 文件鎖5.3.3 多路復(fù)用12 5.3.1 基本文件操作op
6、en函數(shù)是用于打開或創(chuàng)建文件,在打開或創(chuàng)建文件時可以指定文件的屬性及用戶的權(quán)限等各種參數(shù)。所需頭文件:#include #include #include 原型:int open(const char *pathname, int flags, int perms) 135.3.1 基本文件操作open函數(shù)語法要點(diǎn)145.3.1 基本文件操作close()函數(shù)是用于關(guān)閉一個被打開的文件。 close函數(shù)語法要點(diǎn):155.3.1 基本文件操作read()函數(shù)是用于將從指定的文件描述符中讀出的數(shù)據(jù)放到緩存區(qū)中,并返回實(shí)際讀入的字節(jié)數(shù) 。 read函數(shù)語法要點(diǎn):16 5.3.1 基本文件操作writ
7、e()函數(shù)是用于向打開的文件寫數(shù)據(jù),寫操作從文件的當(dāng)前指針位置開始。 write函數(shù)語法要點(diǎn):175.3.1 基本文件操作lseek()函數(shù)是用于在指定的文件描述符中將文件指針定位到相應(yīng)的位置。 lseek函數(shù)語法要點(diǎn):185.3.2 文件鎖文件鎖包括建議性鎖和強(qiáng)制性鎖。建議性鎖要求每個上鎖文件的進(jìn)程都要檢查是否有鎖存在,并且尊重已有的鎖。在一般情況下,內(nèi)核和系統(tǒng)都不使用建議性鎖。強(qiáng)制性鎖是由內(nèi)核執(zhí)行的鎖,當(dāng)一個文件被上鎖進(jìn)行寫入操作的時候,內(nèi)核將阻止其他任何文件對其進(jìn)行讀寫操作。采用強(qiáng)制性鎖對性能的影響很大,每次讀寫操作都必須檢查是否有鎖存在。 在Linux中,實(shí)現(xiàn)文件上鎖的函數(shù)有l(wèi)ockf
8、()和fcntl(),其中l(wèi)ockf()用于對文件施加建議性鎖,而fcntl()不僅可以施加建議性鎖,還可以施加強(qiáng)制鎖。同時,fcntl()還能對文件的某一記錄上鎖,也就是記錄鎖。記錄鎖又可分為讀取鎖和寫入鎖,其中讀取鎖又稱為共享鎖,它能夠使多個進(jìn)程都能在文件的同一部分建立讀取鎖。而寫入鎖又稱為排斥鎖,在任何時刻只能有一個進(jìn)程在文件的某個部分上建立寫入鎖。當(dāng)然,在文件的同一部分不能同時建立讀取鎖和寫入鎖。fcntl()函數(shù)具有很豐富的功能,它可以對已打開的文件描述符進(jìn)行各種操作,不僅包括管理文件鎖,還包括獲得設(shè)置文件描述符和文件描述符標(biāo)志、文件描述符的復(fù)制等很多功能。 195.3.2 文件鎖f
9、cntl()函數(shù)語法要點(diǎn) 20 5.3.2 文件鎖fcntl()函數(shù)第三個參數(shù)lock說明lock為結(jié)構(gòu)體flock它的定義為:struct flock flock成員取值含義如表:short l_type;off_t l_start;short l_whence;off_t l_len;pid_t l_pid; 21 5.3.3 多路復(fù)用I/O處理模型阻塞I/O模型 非阻塞模型 I/O多路轉(zhuǎn)接模型 信號驅(qū)動I/O模型 異步I/O模型 select和poll的I/O轉(zhuǎn)接模型是處理I/O復(fù)用的一個高效的方法 22 5.3.3 多路復(fù)用select()函數(shù)的語法格式 : 23 5.3.3 多路復(fù)用
10、select()對文件描述符進(jìn)行了分類處理,處理涉及4個宏: 245.3.3 多路復(fù)用 poll函數(shù)語法格式: 255.4 嵌入式Linux串口應(yīng)用編程5.4.1 串口概述5.4.2 串口配置詳解5.4.3 串口使用詳解26 5.4.1 串口概述常見的數(shù)據(jù)通信的基本方式可分為并行通信與串行通信兩種。并行通信是指利用多條數(shù)據(jù)傳輸線將一個字?jǐn)?shù)據(jù)的各比特位同時傳送。它的特點(diǎn)是傳輸速度快,適用于傳輸距離短且傳輸速度較高的通信。串行通信是指利用一條傳輸線將數(shù)據(jù)以比特位為單位順序傳送。特點(diǎn)是通信線路簡單,利用簡單的線纜就可實(shí)現(xiàn)通信,降低成本,適用于傳輸距離長且傳輸速度較慢的通信。275.4.1 串口概述串
11、口是計算機(jī)一種常用的接口,常用的串口有RS-535-C接口。DB9串口接口:285.4.2 串口配置詳解串口設(shè)置主要是設(shè)置struct termios結(jié)構(gòu)體的各個成員#include struct termios unsigned short c_iflag;/* 輸入模式標(biāo)志 */unsigned short c_oflag;/* 輸出模式標(biāo)志 */unsigned short c_cflag;/* 控制模式標(biāo)志*/unsigned short c_lflag;/* 本地模式標(biāo)志 */unsigned char c_line;/* 線路規(guī)程 */unsigned char c_ccNCC;
12、/* 控制特性 */speed_t c_ispeed;/* 輸入速度 */speed_t c_ospeed;/* 輸出速度 */;295.4.2 串口配置詳解 保存原先串口設(shè)置為了安全起見和以后調(diào)試程序方便,可以先保存原先串口的配置,在這里可以使用函數(shù)tcgetattr(fd, &old_cfg)。該函數(shù)得到由fd指向的終端的配置參數(shù),并將它們保存于termios結(jié)構(gòu)變量old_cfg中。該函數(shù)還可以測試配置是否正確、該串口是否可用等。若調(diào)用成功,函數(shù)返回值為0,若調(diào)用失敗,函數(shù)返回值為1示例:if (tcgetattr(fd, &old_cfg) != 0) perror(tcgetattr
13、);return -1;305.4.2 串口配置詳解 激活選項(xiàng)CLOCAL和CREAD分別用于本地連接和接受使能,因此,首先要通過位掩碼的方式激活這兩個選項(xiàng)。newtio.c_cflag |= CLOCAL | CREAD;調(diào)用cfmakeraw()函數(shù)可以將終端設(shè)置為原始模式,在后面的實(shí)例中,采用原始模式進(jìn)行串口數(shù)據(jù)通信。cfmakeraw(&new_cfg);315.4.2 串口配置詳解 設(shè)置波特率設(shè)置波特率有專門的函數(shù),用戶不能直接通過位掩碼來操作。設(shè)置波特率的主要函數(shù)有:cfsetispeed()和cfsetospeed()。 示例:cfsetispeed(&new_cfg, B115
14、500);cfsetospeed(&new_cfg, B115500);325.4.2 串口配置詳解 設(shè)置字符大小與設(shè)置波特率不同,設(shè)置字符大小并沒有現(xiàn)成可用的函數(shù),需要用位掩碼。一般首先去除數(shù)據(jù)位中的位掩碼,再重新按要求設(shè)置示例:new_cfg.c_cflag &= CSIZE; /* 用數(shù)據(jù)位掩碼清空數(shù)據(jù)位設(shè)置 */new_cfg.c_cflag |= CS8;335.4.2 串口配置詳解 設(shè)置奇偶校驗(yàn)位設(shè)置奇偶校驗(yàn)位需要用到termios中的兩個成員:c_cflag和c_iflag。首先要激活c_cflag中的校驗(yàn)位使能標(biāo)志PARENB和是否要進(jìn)行校驗(yàn),這樣會對輸出數(shù)據(jù)產(chǎn)生校驗(yàn)位,而輸入
15、數(shù)據(jù)進(jìn)行校驗(yàn)檢查。同時還要激活c_iflag中的對于輸入數(shù)據(jù)的奇偶校驗(yàn)使能(INPCK)。 示例:奇校驗(yàn)new_cfg.c_cflag |= (PARODD | PARENB); new_cfg.c_iflag |= INPCK;偶校驗(yàn)new_cfg.c_cflag |= PARENB;new_cfg.c_cflag &= PARODD; new_cfg.c_iflag |= INPCK;345.4.2 串口配置詳解 設(shè)置停止位設(shè)置停止位是通過激活c_cflag中的CSTOPB而實(shí)現(xiàn)的。若停止位為一個,則清除CSTOPB,若停止位為兩個,則激活CSTOPB。示例:new_cfg.c_cflag
16、 &= CSTOPB;/* 將停止位設(shè)置為一個比特 */new_cfg.c_cflag |= CSTOPB;/* 將停止位設(shè)置為兩個比特 */355.4.2 串口配置詳解 設(shè)置最少字符和等待時間在對接收字符和等待時間沒有特別要求的情況下,可以將其設(shè)置為0,則在任何情況下read()函數(shù)立即返回,此時串口操作會設(shè)置為非阻塞方式。示例:new_cfg.c_ccVTIME = 0;new_cfg.c_ccVMIN = 0;365.4.2 串口配置詳解 清除串口緩沖由于串口在重新設(shè)置之后,需要對當(dāng)前的串口設(shè)備進(jìn)行適當(dāng)?shù)奶幚?,這時就可調(diào)用在中聲明的tcdrain()、tcflow()、tcflush()
17、等函數(shù)來處理目前串口緩沖中的數(shù)據(jù)。原型:int tcflush(int fd, int queue_selector); /* 用于清空輸入/輸出緩沖區(qū)*/tcflush()函數(shù),對于在緩沖區(qū)中的尚未傳輸?shù)臄?shù)據(jù),或者收到的但是尚未讀取的數(shù)據(jù),其處理方法取決于queue_selector的值,它可能的取值有以下幾種。 TCIFLUSH:對接收到而未被讀取的數(shù)據(jù)進(jìn)行清空處理。 TCOFLUSH:對尚未傳送成功的輸出數(shù)據(jù)進(jìn)行清空處理。 TCIOFLUSH:包括前兩種功能,即對尚未處理的輸入輸出數(shù)據(jù)進(jìn)行清空處理。示例:tcflush(fd, TCIFLUSH);375.4.2 串口配置詳解 激活配置在
18、完成全部串口配置之后,要激活剛才的配置并使配置生效。這里用到的函數(shù)是tcsetattr(),它的函數(shù)原型是:tcsetattr(int fd, int optional_actions, const struct termios *termios_p);其中參數(shù)termios_p是termios類型的新配置變量。參數(shù)optional_actions可能的取值有以下三種: TCSANOW:配置的修改立即生效。 TCSADRAIN:配置的修改在所有寫入fd的輸出都傳輸完畢之后生效。 TCSAFLUSH:所有已接受但未讀入的輸入都將在修改生效之前被丟棄。該函數(shù)若調(diào)用成功則返回0,若失敗則返回1385
19、.4.3 串口使用詳解 打開串口使用open函數(shù)打開串口fd = open( /dev/ttyS0, O_RDWR|O_NOCTTY|O_NDELAY);接下來可恢復(fù)串口的狀態(tài)為阻塞狀態(tài),用于等待串口數(shù)據(jù)的讀入,可用fcntl()函數(shù)實(shí)現(xiàn),如下所示:fcntl(fd, F_SETFL, 0);再接著可以測試打開的文件描述符是否連接到一個終端設(shè)備,以進(jìn)一步確認(rèn)串口是否正確打開,如下所示:isatty(fd);該函數(shù)調(diào)用成功則返回0,若失敗則返回-1。讀寫串口使用read/write函數(shù)讀寫串口 write(fd, buff, strlen(buff); read(fd, buff, BUFFER
20、_SIZE); 395.5 標(biāo)準(zhǔn)I/O編程標(biāo)準(zhǔn)I/O提供流緩沖的目的是盡可能減少使用read()和write()等系統(tǒng)調(diào)用的數(shù)量。標(biāo)準(zhǔn)I/O提供了3種類型的緩沖存儲。 全緩沖:在這種情況下,當(dāng)填滿標(biāo)準(zhǔn)I/O緩存后才進(jìn)行實(shí)際I/O操作。對于存放在磁盤上的文件通常是由標(biāo)準(zhǔn)I/O庫實(shí)施全緩沖的。標(biāo)準(zhǔn)I/O盡量多讀寫文件到緩沖區(qū),當(dāng)緩沖區(qū)已滿或手動flush時才會進(jìn)行磁盤操作。 行緩沖:在這種情況下,當(dāng)在輸入和輸出中遇到行結(jié)束符時,標(biāo)準(zhǔn)I/O庫執(zhí)行I/O操作。這允許我們一次輸出一個字符(如fputc()函數(shù)),但只有寫了一行之后才進(jìn)行實(shí)際I/O操作。標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出就是使用行緩沖的典型例子。 不帶緩
21、沖:標(biāo)準(zhǔn)I/O庫不對字符進(jìn)行緩沖。如果用標(biāo)準(zhǔn)I/O函數(shù)寫若干字符到不帶緩沖的流中,則相當(dāng)于用系統(tǒng)調(diào)用write()函數(shù)將這些字符全寫到被打開的文件上。標(biāo)準(zhǔn)出錯stderr通常是不帶緩存的,這就使得出錯信息可以盡快顯示出來,而不管它們是否含有一個行結(jié)束符。405.5.1 基本操作打開文件打開文件有三個標(biāo)準(zhǔn)函數(shù),分別為:fopen()、fdopen()和freopen()。它們可以以不同的模式打開,但都返回一個指向FILE的指針,該指針指向?qū)?yīng)的I/O流。fopen()可以指定打開文件的路徑和模式 fopen函數(shù)格式: 415.5.1 基本操作打開文件mode類似于open()函數(shù)中的flag,可
22、以定義打開文件的訪問權(quán)限等,下面為mode的各種取值: 425.5.1 基本操作打開文件fdopen()可以指定打開的文件描述符和模式。fdopen函數(shù)格式:mode取值同fopen 435.5.1 基本操作打開文件freopen()除可指定打開的文件、模式外,還可指定特定的I/O流。 freopen函數(shù)格式:mode取值同fopen 445.5.1 基本操作關(guān)閉文件關(guān)閉標(biāo)準(zhǔn)流文件的函數(shù)為fclose(),該函數(shù)將緩沖區(qū)內(nèi)的數(shù)據(jù)全部寫入到文件中,并釋放系統(tǒng)所提供的文件資源。fclose()函數(shù)格式: 455.5.1 基本操作讀文件在文件流被打開之后,可對文件流進(jìn)行讀寫等操作,其中讀操作的函數(shù)為
23、fread()。fread()函數(shù)格式: 465.5.1 基本操作寫文件fwrite()函數(shù)是用于對指定的文件流進(jìn)行寫操作。fwrite()函數(shù)格式: 475.5.2 其他操作字符輸入/輸出字符輸入函數(shù):字符輸出函數(shù):485.5.2 其他操作行輸入/輸出行輸入函數(shù):行輸出函數(shù):49 5.5.2 其他操作格式化輸入/輸出格式化輸入函數(shù):505.5.2 其他操作格式化輸入/輸出格式化輸出函數(shù):51 5.6 實(shí)驗(yàn)內(nèi)容文件的讀寫與上鎖實(shí)驗(yàn)?zāi)康耐ㄟ^編寫文件讀寫及上鎖的程序,進(jìn)一步熟悉Linux中文件I/O相關(guān)的應(yīng)用開發(fā),并且熟練掌握open()、read()、write()、fcntl()等函數(shù)的使用。
24、實(shí)驗(yàn)內(nèi)容在Linux中FIFO是一種進(jìn)程之間的管道通信機(jī)制。Linux支持完整的FIFO通信機(jī)制。本實(shí)驗(yàn)內(nèi)容比較有趣,我們通過使用文件操作,仿真FIFO(先進(jìn)先出)結(jié)構(gòu)以及生產(chǎn)者-消費(fèi)者運(yùn)行模型。本實(shí)驗(yàn)中需要打開兩個虛擬終端,分別運(yùn)行生產(chǎn)者程序(producer)和消費(fèi)者程序(customer)。此時兩個進(jìn)程同時對同一個文件進(jìn)行讀寫操作。因?yàn)檫@個文件是臨界資源,所以可以使用文件鎖機(jī)制來保證兩個進(jìn)程對文件的訪問都是原子操作。先啟動生產(chǎn)者進(jìn)程,它負(fù)責(zé)創(chuàng)建仿真FIFO結(jié)構(gòu)的文件(其實(shí)是一個普通文件)并投入生產(chǎn),就是按照給定的時間間隔,向FIFO文件寫入自動生成的字符(在程序中用宏定義選擇使用數(shù)字還是
25、使用英文字符),生產(chǎn)周期以及要生產(chǎn)的資源數(shù)通過參數(shù)傳遞給進(jìn)程(默認(rèn)生產(chǎn)周期為1秒,要生產(chǎn)的資源總數(shù)為10個字符,顯然默認(rèn)生產(chǎn)總時間為10秒鐘)。后啟動的消費(fèi)者進(jìn)程按照給定的數(shù)目進(jìn)行消費(fèi),首先從文件中讀取相應(yīng)數(shù)目的字符并在屏幕上顯示,然后從文件中刪除剛才消費(fèi)過的數(shù)據(jù)。為了仿真FIFO結(jié)構(gòu),此時需要使用兩次拷貝來實(shí)現(xiàn)文件內(nèi)容的偏移。每次消費(fèi)的資源數(shù)通過參數(shù)傳遞給進(jìn)程,默認(rèn)值為10個字符。525.6 實(shí)驗(yàn)內(nèi)容文件的讀寫與上鎖535.6 實(shí)驗(yàn)內(nèi)容 多路復(fù)用式串口操作實(shí)驗(yàn)?zāi)康耐ㄟ^編寫多路復(fù)用串口讀寫,進(jìn)一步理解多路復(fù)用函數(shù)的用法,同時更加熟練掌握Linux設(shè)備文件的讀寫方法。實(shí)驗(yàn)內(nèi)容本實(shí)驗(yàn)中,實(shí)現(xiàn)兩臺機(jī)器(宿主機(jī)和目標(biāo)板)之間的串口通信,而且每臺機(jī)器均可以發(fā)送和接收數(shù)據(jù)。 除了串口設(shè)備名稱不同(宿主機(jī)
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025員工解除合同協(xié)議書
- 房地產(chǎn)合作開發(fā)框架協(xié)議
- 住建部園林綠化合同樣本
- 儀器低價銷售合同樣本
- 借貸公司間合同樣本
- 公司法合同樣本
- 農(nóng)村建房簡易合同樣本
- 減免廣告租金合同樣本
- 供瓷磚工程合同樣本
- 兼職消防聘用合同標(biāo)準(zhǔn)文本
- 動物的遷徙行為與地球生態(tài)系統(tǒng)
- LY-T 3332-2022 森林保險查勘定損技術(shù)規(guī)程
- 總成修理工安全操作規(guī)程
- 2023年10月自考試題00341公文寫作與處理
- 2025年日歷日程表含農(nóng)歷可打印
- 校園金話筒大賽(臨沂賽區(qū))策劃書
- 讀書分享讀書交流會《朝聞道》劉慈欣科幻小說讀書分享
- 《電力工程電纜設(shè)計規(guī)范》
- 2022中國大學(xué)慕課批判性思維南林大答案
- 瀝青集料篩分反算計算表格(自動計算)
- 《建筑深基坑工程施工安全技術(shù)規(guī)范》JGJ311-2013
評論
0/150
提交評論