Linux 下C 編程基礎(chǔ)-Linux課件-文件I-O_第1頁(yè)
Linux 下C 編程基礎(chǔ)-Linux課件-文件I-O_第2頁(yè)
Linux 下C 編程基礎(chǔ)-Linux課件-文件I-O_第3頁(yè)
Linux 下C 編程基礎(chǔ)-Linux課件-文件I-O_第4頁(yè)
Linux 下C 編程基礎(chǔ)-Linux課件-文件I-O_第5頁(yè)
已閱讀5頁(yè),還剩33頁(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)介

5.1文件I/O介紹可用的文件I/O函數(shù)——打開(kāi)文件、讀文件、寫文件等等。大多數(shù)linux文件I/O只需用到5個(gè)函數(shù):open、read、write、lseek

以及close。 不帶緩存指的是每個(gè)read和write都調(diào)用內(nèi)核中的一個(gè)系統(tǒng)調(diào)用。這些不帶緩存的I/O函數(shù)不是ANSIC的組成部分,但是POSIX組成部分。5.2文件描述符對(duì)于內(nèi)核而言,所有打開(kāi)文件都由文件描述符引用。當(dāng)打開(kāi)一個(gè)現(xiàn)存文件或創(chuàng)建一個(gè)新文件時(shí),內(nèi)核向進(jìn)程返回一個(gè)文件描述符。當(dāng)讀、寫一個(gè)文件時(shí),用open或creat返回的文件描述符標(biāo)識(shí)該文件,將其作為參數(shù)傳送給read或write。文件描述符是一個(gè)非負(fù)整數(shù)。文件描述符的范圍是0~OPEN_MAX。其中0、1、2分別被代換為符號(hào)常量,系統(tǒng)留用:STDIN_FILENO0標(biāo)準(zhǔn)輸入(默認(rèn)為鍵盤)STDOUT_FILENO1標(biāo)準(zhǔn)輸出(默認(rèn)為屏幕)STDERR_FILENO2標(biāo)準(zhǔn)錯(cuò)誤輸出(默認(rèn)為屏幕)

注:早期的UNIX版本采用的上限值是19(允許每個(gè)進(jìn)程打開(kāi)20個(gè)文件),對(duì)于現(xiàn)在的很多系統(tǒng)其值有變化。5.3基本APIopen函數(shù)creat函數(shù)read函數(shù)write函數(shù)close函數(shù)lseek函數(shù)fcntl函數(shù)ioctl函數(shù)select實(shí)現(xiàn)I/O復(fù)用5.3.1基本API——open函數(shù)#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>int

open(constchar*pathname,int

oflag, …/*,mode_tmode*/);功能:打開(kāi)文件返回:若成功為文件描述符,若出錯(cuò)為-1參數(shù):參數(shù)名功能說(shuō)明取值pathname要打開(kāi)或創(chuàng)建的文件的名字oflag說(shuō)明對(duì)文件的操作方式由<fcntl.h>頭文件中的常數(shù)定義構(gòu)成參見(jiàn)下面的取值表mode新建文件的權(quán)限設(shè)置僅當(dāng)創(chuàng)建新文件時(shí)才使用該參數(shù)八進(jìn)制表示的權(quán)限值O_RDONLY只讀打開(kāi)。O_WRONLY只寫打開(kāi)。O_RDWR讀、寫打開(kāi)。O_APPEND追加方式寫O_CREAT文件不存在時(shí)創(chuàng)建O_EXCL結(jié)合O_CREAT使用。如果文件存在,返回錯(cuò)誤;如果文件不存在,則創(chuàng)建文件O_TRUNC如果此文件存在,而且為只讀或只寫成功打開(kāi),則將其長(zhǎng)度截短為0。O_NOCTTY如果pathname指的是終端設(shè)備,則不將此設(shè)備分配作為此進(jìn)程的控制終端。O_NONBLOCK如果pathname指的是一個(gè)FIFO、一個(gè)塊特殊文件或一個(gè)字符特殊文件,則此選擇項(xiàng)為此文件的本次打開(kāi)操作和后續(xù)的I/O操作設(shè)置非阻塞方式O_SYNC使每次write都等到物理I/O操作完成。1、Oflag的設(shè)置#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<stdio.h>int

main(int

argc,char*argv[]){

int

fd;

fd=open(“./aa.c”,O_TRUNC);

if(fd==-1) {

perror(“fail\n”);

} else {

perror("success\n");

close(fd); } return0;}實(shí)例:清空文件(刪除文件的全部?jī)?nèi)容)__即將文件的長(zhǎng)度截短為0即O_TRUNC源代碼/*文件aa.c不存在,open出錯(cuò),返回-1。成功執(zhí)行后,aa.c文件中的內(nèi)容將被清除*//*perror(char*msg)完成輸出msg,并輸出perror的執(zhí)行情況,格式為“msg內(nèi)容:執(zhí)行結(jié)果提示”*/open("./aa.c",O_TRUNC);open("./aa.c",O_RDWR|O_CREAT,0666);open("./aa.c",O_RDWR|O_TRUNC);open("./aa.c",O_RDWR|O_APPEND);open("./aa.c",O_RDWR|O_CREAT|O_EXCL);open("./aa.c",O_RDWR|O_CREAT|O_EXCL,0666);

demo1demo2實(shí)例:分析并使用代碼測(cè)試以下open函數(shù)的功能注意:Oflag的多個(gè)值間使用“|”分開(kāi)Open函數(shù)中使用八進(jìn)制指定ugo的權(quán)限2、mode的設(shè)置參考文件權(quán)限設(shè)置命令注意:mode在open中使用八進(jìn)制,以數(shù)字“0”開(kāi)頭【補(bǔ)充】命令“mkdir-m權(quán)限文件或路徑”與“chmod

權(quán)限文件或路徑”權(quán)限mode

的設(shè)置

格式一:[ugoa][+-=][rwx][,...] 格式二:mode可以是數(shù)字字符串其中

u

表示該檔案的擁有者g

表示與該檔案的擁有者屬于同一個(gè)群體(group)者o

表示其他以外的人a

表示這三者皆是

+

表示增加權(quán)限-

表示取消權(quán)限=

表示唯一設(shè)定權(quán)限

r

表示可讀取,對(duì)應(yīng)8進(jìn)制值為4w

表示可寫入,對(duì)應(yīng)8進(jìn)制值為2x

表示可執(zhí)行,對(duì)應(yīng)8進(jìn)制值為1例題:采用格式一和格式二等同mkdir-m

a=rwx

file和mkdir-m0777

file

效果相同mkdir-m

ug=rwx,o=x

file

和mkdir-m

0771

file

效果相同

例題:使用“chmod

權(quán)限文件或路徑”改變文件或路徑的權(quán)限注意:上面的mkdir和chmod命令中的mode可以使用八進(jìn)制(如0777)5.3.2基本API——creat函數(shù)#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>int

creat(constchar*pathname,mode_t

mode);功能:創(chuàng)建一個(gè)新文件。返回:若成功,返回只寫方式打開(kāi)的文件描述符,若出錯(cuò)返回-1。注意:(1)此函數(shù)等效于:open(pathname,O_WRONLY|O_CREAT|O_TRUNC, mode);見(jiàn)例:demo3.c5.3.3基本API——read函數(shù)#include<unistd.h>ssize_t

read(int

fd,void*buff,size_t

nbytes);功能:從打開(kāi)文件中讀數(shù)據(jù)返回:read成功,則返回讀到的字節(jié)數(shù)。如已到達(dá)文件的尾端,則返回0。若出錯(cuò)為-1。參數(shù):參數(shù)名功能說(shuō)明取值fd被讀取文件的文件描述open或creat的返回值buff讀取到的數(shù)據(jù)在內(nèi)存中的位置一般為字符數(shù)組名nbytes期望本次讀到的最大長(zhǎng)度字符數(shù)一般為字符數(shù)組的長(zhǎng)度注意:(1)讀操作從文件的當(dāng)前位移量處開(kāi)始,在成功返回之前,該位移量增加實(shí)際讀得的字節(jié)數(shù)。(2)有多種情況可使實(shí)際讀到的字節(jié)數(shù)少于要求讀字節(jié)數(shù):讀普通文件時(shí),在讀到要求字節(jié)數(shù)之前已到達(dá)了文件尾端。例如,若在到達(dá)文件尾端之前還有30個(gè)字節(jié),而要求讀100個(gè)字節(jié),則read返回30,下一次再調(diào)用read時(shí),它將返回0(文件尾端)。

當(dāng)從終端設(shè)備讀時(shí),通常一次最多讀一行。

某些面向記錄的設(shè)備,例如磁帶,一次最多返回一個(gè)記錄。

當(dāng)從網(wǎng)絡(luò)讀時(shí),網(wǎng)絡(luò)中的緩沖機(jī)制可能造成返回值小于所要求讀的字節(jié)數(shù)。使用規(guī)范:charrc[100];intnum=0;int

df=open(文件,讀權(quán)限);if(df!=-1){ num=read(df,rc,100);

while(num>0) { dosomething;num=read(df,rc,100); }

close(df);}見(jiàn)例:demo4.c補(bǔ)充內(nèi)容:判斷文件的存在性及權(quán)限補(bǔ)充:判讀文件的存在性及權(quán)限#include<unistd.h>

#include<fcntl.h>

int

access(constchar*pathname,intmode);

功能:檢查調(diào)用進(jìn)程是否可以對(duì)指定的文件執(zhí)行某種操作。

參數(shù):pathname:需要測(cè)試的文件路徑名。

mode:需要測(cè)試的操作模式,可能值是一個(gè)或多個(gè)(組合體):R_OK(可讀?)W_OK(可寫?)X_OK(可執(zhí)行?)F_OK(文件存在?)返回:成功執(zhí)行時(shí),返回0。失敗返回-1

見(jiàn)例:

demo5.c5.3.4基本API——write函數(shù)#include<unistd.h>ssize_t

write(int

fd,constvoid*buff,size_t

nbytes);功能:向打開(kāi)文件寫數(shù)據(jù)返回:若成功為已寫的字節(jié)數(shù),若出錯(cuò)為-1。注意:(1)其返回值通常與參數(shù)nbytes的值相同,否則表示出錯(cuò)。write出錯(cuò)的一個(gè)常見(jiàn)原因是:磁盤已寫滿。超過(guò)了對(duì)一個(gè)給定進(jìn)程的文件長(zhǎng)度限制。(2)對(duì)于普通文件,寫操作從文件的當(dāng)前位移量處開(kāi)始。如果在打開(kāi)該文件時(shí),指定了O_APPEND選擇項(xiàng),則在每次寫操作之前,將文件位移量設(shè)置在文件的當(dāng)前結(jié)尾處。在一次成功寫之后,該文件位移量增加實(shí)際寫的字節(jié)數(shù)。使用規(guī)范(一次性輸出字符串到文件):charrc[100]=字符串;//設(shè)字符串的最大長(zhǎng)度為100intnum=0,TotalLong=strlen(rc);int

df=open(文件,寫權(quán)限);if(df!=-1){ //一次性輸出

if(num!=TotalLong) {

printf(“輸出錯(cuò)誤!”); return0; } else {

printf(“成功輸出!”); }}見(jiàn)例:um=write(df,rc,TotalLong);使用規(guī)范(分次輸出字符串到文件):charrc[3000]=“…”;//設(shè)字符串的最大長(zhǎng)度為3000char*prc=rc;intnum=0,TotalLong=strlen(rc);int

df=open(文件,寫權(quán)限);if(df!=-1){//每次希望輸出100個(gè)字符

while(num!=TotalLong) {

//修正偏移量

num=write(df,prc,100);

TotalLong=TotalLong-num; }}見(jiàn)例:demo7.c文件復(fù)制見(jiàn)例:um=write(df,prc,100);prc=prc+num;

//不能使用prc+100,由于num<=1005.3.5基本API——close函數(shù)#include<unistd.h>intclose(int

filedes);功能:關(guān)閉一個(gè)打開(kāi)文件返回:若成功為0,若出錯(cuò)為-1注意:當(dāng)一個(gè)進(jìn)程終止時(shí),它所有的打開(kāi)文件都由內(nèi)核自動(dòng)關(guān)閉。作為一個(gè)習(xí)慣好的程序員,應(yīng)該顯式地用close關(guān)閉打開(kāi)的文件。5.3.6基本API——lseek函數(shù)1、當(dāng)前文件偏移量當(dāng)前文件偏移量是一個(gè)非負(fù)整數(shù),用以度量打開(kāi)文件從文件開(kāi)始處計(jì)算的字節(jié)數(shù)。通常,讀、寫操作都從當(dāng)前文件偏移量處開(kāi)始,并使偏移量增加所讀或?qū)懙淖止?jié)數(shù)。按系統(tǒng)默認(rèn),當(dāng)打開(kāi)一個(gè)文件時(shí),除非指定O_APPEND選擇項(xiàng),否則該位移量被設(shè)置為0??梢哉{(diào)用lseek顯式地定位一個(gè)打開(kāi)文件的文件偏移量。2、lseek#include<sys/types.h>#include<unistd.h>off_t

lseek(int

fd,off_toffset,intwhence);功能:顯式地定位一個(gè)打開(kāi)文件的文件偏移量。返回:若成功為新的文件位移,若出錯(cuò)為-1。參數(shù):參數(shù)名功能說(shuō)明取值fd被讀取文件的文件描述open或creat的返回值offset相對(duì)偏移量偏移量的值,可以有正負(fù)whence相對(duì)參考方式SEEK_SET:位移量=文件開(kāi)始處+offset個(gè)字節(jié)SEEK_CUR:位移量=當(dāng)前位移量+offset個(gè)字節(jié)SEEK_END:位移量=文件長(zhǎng)度+offset個(gè)字節(jié)見(jiàn)例注釋:demo9_1.c見(jiàn)例:demo9.c補(bǔ)充STDOUT_FILENO補(bǔ)充:標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出,標(biāo)準(zhǔn)出錯(cuò)1、unix系統(tǒng)調(diào)用中的標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出,標(biāo)準(zhǔn)出錯(cuò)有兩組:STDOUT_FILENOSTDIN_FILENOSTDERR_FILENOstdin

stdout

stderr

2、相同點(diǎn):STDOUT_FILENOSTDIN_FILENOSTDERR_FILENO和stdin

stdout

stderr

他們表示的意思是差不多的,都是unix系統(tǒng)調(diào)用中的標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出,標(biāo)準(zhǔn)出錯(cuò)。補(bǔ)充:標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出,標(biāo)準(zhǔn)出錯(cuò)3、區(qū)別:他們的類型是不一樣stdin等是FILE*類型,屬于標(biāo)準(zhǔn)I/O,在<stdio.h>。#include<stdio.h>externFILE*stdin;externFILE*stdout;externFILE*stderr;STDIN_FILENO等是文件描述符,是非負(fù)整數(shù),一般定義為0,1,2,屬于沒(méi)有buffer的I/O,直接調(diào)用系統(tǒng)調(diào)用,在<unistd.h>。在/usr/include/unistd.h中有如下定義:/*Standardfiledescriptors.*/#defineSTDIN_FILENO0/*Standardinput.*/#defineSTDOUT_FILENO1/*Standardoutput.*/#defineSTDERR_FILENO2/*Standarderroroutput.*/例題:#include<unistd.h>int

main(void){

intn;charbuf[100];

while(n=read(STDIN_FILENO,buf,100))//讀取標(biāo)準(zhǔn)輸入到buf中,返回讀取字節(jié)數(shù)。{

if(n!=write(STDOUT_FILENO,buf,n))//把buf

寫到標(biāo)準(zhǔn)輸出中

perror("writeerror");}

if(n<0)perror("readerror");return0;}1、標(biāo)準(zhǔn)終端運(yùn)行結(jié)果:輸入一行,馬上輸出一行,也就是按照原樣輸出注意:終端輸入文件時(shí),使用ctrl+d來(lái)輸入文件結(jié)束符demo10.c2、使用輸出重定向來(lái)運(yùn)行可以使得輸入的字符串并不是輸出到終端,而是輸出到指定的文件中3、使用輸入輸出重定向來(lái)運(yùn)行輸入的字符串可以不從鍵盤,而是從文件或已有的文件描述符中獲得分析wc命令,更多關(guān)于重定向命令參照”重定向”5.3.7基本API——fcntl函數(shù)#include<sys/types.h>#include<unistd.h>#include<fcntl.h>int

fcntl(int

fd,int

cmd);

int

fcntl(int

fd,int

cmd,longarg);

int

fcntl(int

fd,int

cmd,structflock*lock);功能:根據(jù)文件描述符來(lái)操作文件的特性

。參數(shù):參數(shù)名說(shuō)明取值fd被操作的文件描述符cmd操作命令F_DUPFD復(fù)制一個(gè)現(xiàn)有的描述符F_GETFD或F_SETFD獲得/設(shè)置文件描述符標(biāo)記

F_GETFL或F_SETFL獲得/設(shè)置文件狀態(tài)標(biāo)記

F_GETOWN或F_SETOWN獲得/設(shè)置異步I/O所有權(quán)

F_GETLK,F_SETLK或F_SETLKW獲得/設(shè)置記錄鎖注意:F_SETFL將文件狀態(tài)標(biāo)志設(shè)置為第三個(gè)參數(shù)的值(取為整型值)。可以更改的幾個(gè)標(biāo)志是:O_APPEND,O_NONBLOCK,O_SYNC,O_ASYNC。F_GETOWN取當(dāng)前接收SIGIO和SIGURG信號(hào)的進(jìn)程ID或進(jìn)程組ID。F_SETOWN設(shè)置接收SIGIO和SIGURG信號(hào)的進(jìn)程ID或進(jìn)程組ID。正的arg指定一個(gè)進(jìn)程ID,負(fù)的arg表示等于arg絕對(duì)值的一個(gè)進(jìn)程組ID。F_SETLKW是F_SETLK的阻塞版本(命令名中的W表示等待wait)。如果存在其他鎖,則調(diào)用進(jìn)程睡眠;如果捕捉到信號(hào)則睡眠中斷

返回值:如果出錯(cuò),所有命令都返回-1,如果成功則返回某個(gè)其他值(返回值與命令cmd有關(guān))。

int

main(void){

int

fd,flag; if((fd=open("./test.txt",O_RDWR|O_APPEND|O_CREAT|O_TRUNC,0666))<0) {

perror("open"); exit(-1); }

write(fd,"yang",4);

lseek(fd,0,SEEK_SET);

write(fd,"zhu",3); return0;}

例題:獲得并修改文件狀態(tài)標(biāo)記。代碼:demo11flag=fcntl(fd,F_GETFL);flag=flag&~O_APPENDfcntl(fd,F_SETFL,flag);int

fcntl(int

fd,int

cmd,structflock*lock);1、文件鎖的使用環(huán)境:在文件已經(jīng)共享的情況下,也就是當(dāng)多個(gè)用戶共同使用,操作一個(gè)文件的情況,這時(shí)LINUX通常采用的方法是給文件上鎖,來(lái)避免共享的資源產(chǎn)生競(jìng)爭(zhēng)的狀態(tài)。補(bǔ)充:用fcntl給文件加鎖flock結(jié)構(gòu)體包含了設(shè)置記錄鎖的具體狀態(tài)成員flock的結(jié)構(gòu)如下所示:Structflock{shortl_type; /*鎖的類型,取值如下: F_RDLCK讀取鎖(共享鎖)F_WRLCK寫入鎖(排斥鎖)F_UNLCK解鎖*/off_t

l_start; //相對(duì)位移量(字節(jié))shortl_whence; /*相對(duì)位移量的起點(diǎn),取值如下:SEEK_SET/SEEK_CUR/SEEK_END(同lseek的whence)*/off_t

l_len;//加鎖區(qū)域的長(zhǎng)度pid_t

l_pid;}2、flock結(jié)構(gòu)注意:為加鎖整個(gè)文件,通常的方法是將l_start

說(shuō)明為0,l_whence

說(shuō)明為SEEK_SET,l_len

說(shuō)明為0。例題:寫入鎖為互斥鎖,一個(gè)時(shí)刻只能有一個(gè)寫入鎖存在。代碼:demo12_1例題:讀取鎖為共享鎖,當(dāng)一個(gè)進(jìn)程已設(shè)定讀取鎖后,另一個(gè)進(jìn)程還可以設(shè)置讀取鎖。代碼:demo12_25.3.8基本API——ioctl函數(shù)#include<unistd.h>#include<sys/ioctl.h>int

ioctl(int

fd,int

cmd,...);功能:ioctl最主要使用在終端設(shè)備I/O控制。返回:若出錯(cuò)則為-1,若成功則為其他值。參數(shù):參數(shù)名說(shuō)明取值fd要控制的設(shè)備文件描述符cmd要設(shè)備完成的操作cmd參數(shù)cmd操作的參數(shù)代碼:demo13#include<sys/types.h>#include<sys/time.h>#include<unistd.h>intselect(int

maxfd,

fd_set*readset, fd_set*writeset,

fd_set*exceptset, conststructtimeval*timeout);功能:同時(shí)監(jiān)控多個(gè)文件描述符上是否有輸入、輸出、錯(cuò)誤。返回:準(zhǔn)備就緒的描述符數(shù),若超時(shí)則為0,若出錯(cuò)則為-1。5.3.9基本API——

select函數(shù)參數(shù)名說(shuō)明取值maxfd要被監(jiān)控的描述符個(gè)數(shù)最大fd+1readset被監(jiān)控的是否有輸入的文件描述符集初始化時(shí),被監(jiān)控描述字的相應(yīng)位置0;調(diào)用select后,未就就緒設(shè)備的相應(yīng)位被置為0,就緒位置為1writeset被監(jiān)控的是否有輸出的文件描述符集exceptset被監(jiān)控的是否有錯(cuò)誤產(chǎn)生的文件描述符集timeval監(jiān)控的超時(shí)時(shí)間structtimeval類型的指針。參見(jiàn)timeval取值參見(jiàn)文件描述符集操作宏函數(shù)代碼:demo17select函數(shù)根據(jù)希望進(jìn)行的文件操作對(duì)文件描述符進(jìn)行分類處理,對(duì)文件描述符的處理主要設(shè)計(jì)4個(gè)宏函數(shù):FD_ZERO(fd_set*set) 清除一個(gè)文件描述符集;FD_SET(int

fd,fd_set*set) 將一個(gè)文件描述符加入文件描述符集中;FD_CLR(int

fd,fd_set*set)

將一個(gè)文件描述符從文件描述符集中清除;FD_ISSET(int

fd,fd_set*set)

測(cè)試該集中的一個(gè)給定位是否有變化;文件描述符集操作宏函數(shù)參數(shù)名說(shuō)明取值maxfd要被監(jiān)控的描述符個(gè)數(shù)最大fd+1readset被監(jiān)控的是否有輸入的文件描述符集初始化時(shí),被監(jiān)控描述字的相應(yīng)位置0;調(diào)用select后,未就就緒設(shè)備的相應(yīng)位被置為0,就緒位置為1writeset被監(jiān)控的是否有輸出的文件描述符集exceptset被監(jiān)控的是否有錯(cuò)誤產(chǎn)生的文件描述符集timeval監(jiān)控的超時(shí)時(shí)間structtimeval類型的指針。參見(jiàn)timeval取值參見(jiàn)文件描述符集操作宏函數(shù)代碼:demo17timeval取值NULL:永遠(yuǎn)等待,直到捕捉到信號(hào)或文件描述符已準(zhǔn)備好為止;具體值:

structtimeval類型的指針,若等待為timeout時(shí)間還沒(méi)有文件描述符準(zhǔn)備好,就立即返回;0:從不等待,測(cè)試所有指定的描述符并立即返回;structtimeval{longtv_sec;/*seconds*/longtv_usec;/*microseconds*/};timeval結(jié)構(gòu)體代碼:demo14#include<sys/time.h>int

gettimeofday(struct

timeva

溫馨提示

  • 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)論