Linux系統(tǒng)API函數(shù)手冊(cè)_第1頁(yè)
Linux系統(tǒng)API函數(shù)手冊(cè)_第2頁(yè)
Linux系統(tǒng)API函數(shù)手冊(cè)_第3頁(yè)
Linux系統(tǒng)API函數(shù)手冊(cè)_第4頁(yè)
Linux系統(tǒng)API函數(shù)手冊(cè)_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

(-)文獻(xiàn)操作篇

1、creat(建立文獻(xiàn))

頭文獻(xiàn)

1#include<sys/types.h>

2#include<sys/stat.h>

3#include<fcntl.h>

定義函數(shù)

1intcreat(constchar*pathname,mode_tmode);

函數(shù)說(shuō)明

參數(shù)paihname指向欲建立的文獻(xiàn)途徑字符串。creai()相稱(chēng)于使用下列的調(diào)用方式調(diào)用open。

1open(constchar*pathname,(O_CREAT|O_WRONLY|O_TRUNC));

錯(cuò)誤代碼

關(guān)于參數(shù)mode請(qǐng)參考o(jì)pen()函數(shù)。

返回值

creat()會(huì)返回新的文獻(xiàn)描述詞,若有錯(cuò)誤發(fā)生則會(huì)返回-1,并把錯(cuò)誤代碼設(shè)給errno。

EEXIST參數(shù)pathname所指的文獻(xiàn)已存在。

EACCESS參數(shù)pathname所指定的文獻(xiàn)不符合所規(guī)定測(cè)試的權(quán)限

EROFS欲打開(kāi)寫(xiě)入權(quán)限的文獻(xiàn)存在于只讀文獻(xiàn)系統(tǒng)內(nèi)

EFAULT參數(shù)pathname指升超過(guò)可存取的內(nèi)存空間

EINVAL參數(shù)mode不對(duì)的。

ENAMETOOLONG參數(shù)pathname太長(zhǎng)。

ENOTDIR參數(shù)pathname為一目錄

ENOMEM核心內(nèi)存局限性

ELOOP參數(shù)paihname有過(guò)多符號(hào)連接問(wèn)題。

EMFILE已達(dá)成進(jìn)程可同時(shí)打開(kāi)的文獻(xiàn)數(shù)上限

ENFILE已達(dá)成系統(tǒng)可同時(shí)打開(kāi)的文獻(xiàn)數(shù)上限

附加說(shuō)明

creat()無(wú)法建立特別的裝置文獻(xiàn),假如需要請(qǐng)使用mknod(),

2、open(打開(kāi)文獻(xiàn))

頭文獻(xiàn)

1#include<sys/types.h>

2#include<sys/slat.h>

3#include<fcntl.h>

定義函數(shù)

Iintopen(constchar*pathname,intflags);

2intopen(constchar*pathname,iniflags,mode_lmode);

函數(shù)說(shuō)明

參數(shù)pathname指向欲打開(kāi)的文獻(xiàn)途徑字符串。下列是參數(shù)flags所能使用的旗標(biāo):

O.RDONLY以只讀方式打開(kāi)文獻(xiàn)

O_WRONLY以只寫(xiě)方式打開(kāi)文獻(xiàn)

O_RDWR以可讀寫(xiě)方式打開(kāi)文獻(xiàn)。上述三種旗標(biāo)是互斥的,也就是不可同時(shí)使用,但可與下列

的旗標(biāo)運(yùn)用OR(|)運(yùn)算符組合。

O_CREAT若欲打開(kāi)的文獻(xiàn)不存在則自動(dòng)建立該文獻(xiàn)。

O_EXCL假如O-CREAT也被設(shè)立,此指令會(huì)去檢查文獻(xiàn)是否存在。文獻(xiàn)若不存在則建立該文

獻(xiàn),否則將導(dǎo)致打開(kāi)文獻(xiàn)錯(cuò)誤。此外,若O-CREAT與O_EXCL同時(shí)設(shè)立,并且欲打開(kāi)的文獻(xiàn)

為符號(hào)連接,則會(huì)打開(kāi)文獻(xiàn)失敗。

O_NOCTTY假如欲打開(kāi)的文獻(xiàn)為終端機(jī)設(shè)備時(shí),則不會(huì)將該終端機(jī)當(dāng)成進(jìn)程控制終端機(jī)。

O_TRUNC若文獻(xiàn)存在并且以可寫(xiě)的方式打開(kāi)時(shí),此旗標(biāo)會(huì)令文獻(xiàn)長(zhǎng)度清為0,而本來(lái)存于該

文獻(xiàn)的資料也會(huì)消失。

O_APPEND當(dāng)讀寫(xiě)文獻(xiàn)時(shí)會(huì)從文獻(xiàn)尾開(kāi)始移動(dòng),也就是所寫(xiě)入的數(shù)據(jù)會(huì)以附加的方式加入到文

獻(xiàn)后面。

O_NONBLOCK以不可阻斷的方式打開(kāi)文獻(xiàn),也就是無(wú)論有無(wú)數(shù)據(jù)讀取或等待,都會(huì)立即返回

進(jìn)程之中。

O.NDELAY同O_NONBLOCK。

O_SYNC以同步的方式打開(kāi)文獻(xiàn)。

O_NOFOLLOW假如參數(shù)pathname所指的文獻(xiàn)為一符號(hào)連接,則會(huì)令打開(kāi)文獻(xiàn)失敗。

O_DIRECTORY假如參數(shù)pathname所指的文獻(xiàn)并非為一目錄,則會(huì)令打開(kāi)文獻(xiàn)失敗。

此為L(zhǎng)inux2.2以后特有的旗標(biāo),以避免一些系統(tǒng)安全問(wèn)題。參數(shù)mode則有卜.列數(shù)種組合,只

有在建立新文獻(xiàn)時(shí)才會(huì)生效,此外真正建文獻(xiàn)時(shí)的權(quán)限會(huì)受到umask值所影響,因此該文獻(xiàn)權(quán)

限應(yīng)當(dāng)為(mode-umaks)。

SJRWXU00700權(quán)限,代表該文獻(xiàn)所有者具有可讀、可寫(xiě)及可執(zhí)行的權(quán)限。

S」RUSR或S」READ,00400權(quán)限,代表該文獻(xiàn)所有者具有可讀取的權(quán)限。

S」WUSR或S」WRITE,。0200權(quán)限,代表該文獻(xiàn)所有者具有可寫(xiě)入的權(quán)限。

S」XUSR或S」EXEC,00100權(quán)限,代表該文獻(xiàn)所有者具有可執(zhí)行的權(quán)限。

S」RWXG00070權(quán)限,代表該文獻(xiàn)用戶(hù)組具有可讀、可寫(xiě)及可執(zhí)行的權(quán)限。

S」RGRP00040權(quán)限,代表該文獻(xiàn)用戶(hù)組具有可讀的權(quán)限。

SJWGRP00020權(quán)限,代表該文獻(xiàn)用戶(hù)組具有可寫(xiě)入的權(quán)限。

S」XGRP00010權(quán)限,代表該文獻(xiàn)用戶(hù)組具有可執(zhí)行的權(quán)限。

S」RWXO00007權(quán)限,代表其他用戶(hù)具有可讀、可寫(xiě)及可執(zhí)行的權(quán)限。

S」ROTH00004權(quán)限,代表其他用戶(hù)具有可讀的權(quán)限

S-IWOTH00002權(quán)限,代表其他用戶(hù)具有可寫(xiě)入的權(quán)限。

SJXOTH00001權(quán)限,代表其他用戶(hù)具有可執(zhí)行的權(quán)限。

返回值

若所有欲核查的權(quán)限都通過(guò)了檢查則返回0值,表達(dá)成功,只要有一個(gè)權(quán)限被嚴(yán)禁則返回?1。

錯(cuò)誤代碼

EEXIST參數(shù)pathname所指的文獻(xiàn)已存在,卻使用了O_CREAT和O_EXCL旗標(biāo)。

EACCESS參數(shù)pathname所指的文獻(xiàn)不符合所規(guī)定測(cè)試的權(quán)限。

EROFS欲測(cè)試寫(xiě)入權(quán)限的文獻(xiàn)存在于只讀文獻(xiàn)系統(tǒng)內(nèi)。

EFAULT參數(shù)pathname指針超過(guò)可存取內(nèi)存空間。

EINVAL參數(shù)mode不對(duì)的。

ENAMETOOLONG參數(shù)pathname太長(zhǎng)。

ENOTDIR參數(shù)pathname不是目錄。

假如順利read。會(huì)返回實(shí)際讀到的字節(jié)數(shù),最佳能將返回值與參數(shù)couni作比較,若返回的字節(jié)

數(shù)比規(guī)定讀取的字節(jié)數(shù)少,則有也許讀到了文獻(xiàn)尾、從管道(pipe)或終端機(jī)讀取,或者是read。

被信號(hào)中斷了讀取動(dòng)作。當(dāng)有錯(cuò)誤發(fā)生時(shí)則返回-1,錯(cuò)誤代碼存入errno中,而文獻(xiàn)讀寫(xiě)位置則

無(wú)法預(yù)期。

錯(cuò)誤代碼

EINTR此調(diào)用被信號(hào)所中斷。

EAGAIN當(dāng)使用不可阻斷I/O時(shí)(O_NONBLOCK),若無(wú)數(shù)據(jù)可讀取則返回此值。

EBADF參數(shù)fd非有效的文獻(xiàn)描述同,或該文獻(xiàn)已關(guān)閉。

5、write(將數(shù)據(jù)寫(xiě)入已打開(kāi)的文獻(xiàn)內(nèi))

頭文獻(xiàn)

I#include<unistd.h>

定義函數(shù)

1ssize_twrite(intfd,constvoid*buf,size_tcount);

函數(shù)說(shuō)明

write。會(huì)把參數(shù)buf所指的為存寫(xiě)入count個(gè)字節(jié)到參數(shù)fd所指的文獻(xiàn)內(nèi)。當(dāng)然,文獻(xiàn)讀寫(xiě)位置

也會(huì)隨之移動(dòng)。

返回值

假如順利write。會(huì)返回實(shí)際寫(xiě)入的字節(jié)數(shù)。當(dāng)有錯(cuò)誤發(fā)生時(shí)則返回-1,錯(cuò)誤代碼存入errno中。

錯(cuò)誤代碼

EINTR此調(diào)用被信號(hào)所中斷。

EAGAIN當(dāng)使用不可阻斷I/O時(shí)(CLNONBLOCK),若無(wú)數(shù)據(jù)可讀取則返回此值。

EADF參數(shù)fd非有效的文獻(xiàn)描述詞,或該文獻(xiàn)已關(guān)閉。

6、flock(鎖定文獻(xiàn)或解除鎖定)

頭文獻(xiàn)

1#include<sys/file.h>

定義函數(shù)

1intflock(intfd,intoperation);

函數(shù)說(shuō)明

flock。會(huì)依參數(shù)operation所指定的方式對(duì)參數(shù)fd所指的文獻(xiàn)做各種鎖定或解除鎖定的動(dòng)作。此

函數(shù)只能鎖定整個(gè)文獻(xiàn),無(wú)法鎖定文獻(xiàn)的某一區(qū)域。

參數(shù)

operation有下列四種情況:

LOCK_SH建立共享鎖定。多個(gè)進(jìn)程可同時(shí)對(duì)同一個(gè)文獻(xiàn)作共享鎖定。

LOCK_EX建立互斥鎖定。一個(gè)文獻(xiàn)同時(shí)只有一個(gè)互斥鎖定。

LOCK_UN解除文獻(xiàn)鎖定狀態(tài)。

LOCK_NB無(wú)法建立鎖定期,此操作可不被阻斷,立即返回進(jìn)程。通常與LOCK_SH或

LOCK_EX做OR(|)組合。

單一文獻(xiàn)無(wú)法同時(shí)建立共享鎖定和互斥鎖定,而當(dāng)使用dup()或fork。時(shí)文獻(xiàn)描述詞不會(huì)繼承此

種鎖定。

返回值

返回。表達(dá)成功,若有錯(cuò)誤則返回-1,錯(cuò)誤代碼存于erm。。

7、Iscek(移動(dòng)文獻(xiàn)的讀寫(xiě)位置)

頭文獻(xiàn)

1#include<sys/types.h>

2#include<unistd.h>

定義函數(shù)

1off_tlseek(intfildes,off_toffset,intwhence);

函數(shù)說(shuō)明

每一個(gè)已打開(kāi)的文獻(xiàn)都有一個(gè)讀寫(xiě)位置,當(dāng)打開(kāi)文獻(xiàn)時(shí)通常其讀寫(xiě)位置是指向文獻(xiàn)開(kāi)頭,若是

以附加的方式打開(kāi)文獻(xiàn)(如O_APPEND),則讀寫(xiě)位置會(huì)指向文獻(xiàn)尾。當(dāng)read?;騱rite。時(shí),讀

寫(xiě)位置會(huì)隨之增長(zhǎng),lseek()便是用來(lái)控制該文獻(xiàn)的讀寫(xiě)位置。參數(shù)fildes為已打開(kāi)的文獻(xiàn)描述

詞,參數(shù)offset為根據(jù)參數(shù)whence來(lái)移動(dòng)讀寫(xiě)位置的位移數(shù)。

參數(shù)

whence為下列其中一種:

SEEK.SET參數(shù)offset即為新的讀寫(xiě)位置。

SEEKCUR以目前的讀寫(xiě)位置往后增長(zhǎng)。ffset個(gè)位移量。

SEEK_END將讀寫(xiě)位置指向文獻(xiàn)尾后再熠長(zhǎng)offset個(gè)位移量。

當(dāng)whence值為SEEK.CUR或SEEK_END時(shí),參數(shù)offet允許負(fù)值的出現(xiàn)。

下列是教特別的使用方式:

1)欲將讀寫(xiě)位置移到文獻(xiàn)開(kāi)頭時(shí):lseek(intfildes,O,SEEK_SET);

2)欲將讀寫(xiě)位置移到文獻(xiàn)尾時(shí):lseek(intfildes,0,SEEK_END);

3)想要取得目前文獻(xiàn)位置時(shí):lseek(intfildes,O.SEEK_CUR):

返回值

當(dāng)調(diào)用成功時(shí)則返回目前的讀寫(xiě)位置,也就是距離文獻(xiàn)開(kāi)頭多少個(gè)字節(jié)。若有錯(cuò)誤則返回

ermo會(huì)存放錯(cuò)誤代碼。

附加說(shuō)明

Linux系統(tǒng)不允許keek()對(duì)lly裝置作用,此項(xiàng)動(dòng)作會(huì)令I(lǐng)seek()返回ESPIPE。

8、fcntl(文獻(xiàn)描述詞操作)

頭文獻(xiàn)

1#include<unistd.h>

2#include<fcntLh>

定義函數(shù)

1intfcntl(intfd,intcmd);

2intfcntl(intfd,intcmd.longarg);

3intfcntl(intfd,intcmd,structflock*lock);

函數(shù)說(shuō)明

fcntl()用來(lái)操作文獻(xiàn)描述詞的一些特性。參數(shù)fd代表欲設(shè)立的文獻(xiàn)描述詞,參數(shù)cmd代表欲操

作的指令。

有以下幾種情況:

F_DUPFD用來(lái)查找大于或等于參數(shù)arg的最小且仍未使用的文獻(xiàn)描述詞,并且復(fù)制參數(shù)fd的

文獻(xiàn)描述詞。執(zhí)行成功則返回新復(fù)制的文獻(xiàn)描述詞。請(qǐng)參考dup2()。F_GETFD取得close-on-

excc旗標(biāo)。若此旗標(biāo)的FD.CLOEXEC位為0,代表在調(diào)用exec。相關(guān)函數(shù)時(shí)文獻(xiàn)將不會(huì)關(guān)閉。

F.SETFD設(shè)立ciose-on-exec旗標(biāo)。該旗標(biāo)以參數(shù)arg的FD.CLOEXEC位決定。

F_GETFL取得文獻(xiàn)描述詞狀態(tài)旗標(biāo),此旗標(biāo)為open()的參數(shù)flags。

F_SETFL設(shè)立文獻(xiàn)描述詞狀態(tài)旗標(biāo),參數(shù)arg為新旗標(biāo),但只允許O_APPEND、

O_NONBLOCK和O_ASYNC位的改變,其他位的改變將不受影響。

F_GETLK取得文獻(xiàn)鎖定的狀態(tài)。

F_SETLK設(shè)立文獻(xiàn)鎖定的狀態(tài)。此時(shí)tlcok結(jié)構(gòu)的l」ype值必須是F_RDLCK、F_WRLCK或

F_UNLCK。假如無(wú)法建立鎖定,則返回-1,錯(cuò)誤代碼為EACCES或EAGAIN。

F_SETLKWF_SETLK作用相同,但是無(wú)法建立鎖定期,此調(diào)用會(huì)一直等到鎖定動(dòng)作成功為

止。若在等待鎖定的過(guò)程中被信號(hào)中斷時(shí),會(huì)立即返回-1,錯(cuò)誤代碼為EINTR。參數(shù)lock指針

為flock結(jié)構(gòu)指針,定義如下

1structflcok

2{

3shortintl_type;/*鎖定的狀態(tài)*/

4shortintLwhence;/*決定l_start位置*/

5offltLstart;/*鎖定區(qū)域的開(kāi)頭位置*/

6off」l」en;/*鎖定區(qū)域的大小*/

7pid_tl_pid;/*鎖定動(dòng)作的進(jìn)程*/

8};

Ltype有三種狀態(tài):

F_RDLCK建立一個(gè)供讀取用的鎖定

F.WRLCK建立一個(gè)供寫(xiě)入用的鎖定

F_UNLCK刪除之前建立的鎖定

l_whence也有三種方式:

SEEK.SET以文獻(xiàn)開(kāi)頭為鎖定的起始位置。

SEEK_CUR以目前文獻(xiàn)讀寫(xiě)位置為鎖定的起始位置

SEEK_END以文獻(xiàn)結(jié)尾為鎖定的起始位置。

返回值

成功則返回0,若有錯(cuò)誤則返回-1,錯(cuò)誤因索存于ermo.

9、fgets(由文獻(xiàn)中讀取一字符串)

頭文獻(xiàn)

1include<stdio.h>

定義函數(shù)

1char*fgets(char*s,intsize,FILE*stream);

函數(shù)說(shuō)明

fgets()用來(lái)從參數(shù)stream所指的文獻(xiàn)內(nèi)讀入字符并存到參數(shù)s所指的內(nèi)存空間,直到出現(xiàn)換行

字符、讀到文獻(xiàn)尾或是已讀了size/個(gè)字符為止,最后會(huì)加上NULL作為字符串結(jié)束。

返回值

gcts()若成功則返回s指針,返回NULL則表達(dá)有錯(cuò)誤發(fā)生.

10、fputs(將一指定的字符串寫(xiě)入文獻(xiàn)內(nèi))

頭文獻(xiàn)

1#include<stdio.h>

定義函數(shù)

1intfputs(constchar*s,FILE*stream);

函數(shù)說(shuō)明

fputs。用來(lái)將參數(shù)s所指的字符串寫(xiě)入到參數(shù)stream所指的文獻(xiàn)內(nèi)。

返回值

若成功則返回寫(xiě)出的字符個(gè)數(shù),返回EOF則表達(dá)有錯(cuò)誤發(fā)生。

(二)內(nèi)存控制篇

1、calloc(配置內(nèi)存空間)

頭文獻(xiàn)

1#include<stdlib.h>

定義函數(shù)

1void*calloc(size_tnmemb,size_tsize);

函數(shù)說(shuō)明

calloc。用來(lái)配置nmemb個(gè)相鄰的內(nèi)存單位,每一單位的大小為size,并返回指向第一個(gè)元素的

指針。這和使用卜,歹U的方式效果相同:ma1loc(nmen]b*size);但是,在運(yùn)用calloc。配置內(nèi)存時(shí)會(huì)將

內(nèi)存內(nèi)容初始化為0。

返回值

若配置成功則返回一指針,失敗則返回NULLo

2、free(釋放原先配置的內(nèi)存)

頭文獻(xiàn)

1#include<stdlib.h>

定義函數(shù)

1voidfree(void*ptr);

函數(shù)說(shuō)明

參數(shù)ptr為指向先前由maHoc。、calloc()或realloc。所返回的內(nèi)存指針。調(diào)用free。后ptr所指的

內(nèi)存空間便會(huì)被收回。假若參數(shù)ptr所指的內(nèi)存空間已被收回或是未知的內(nèi)存地址,則調(diào)用

free()也許會(huì)有無(wú)法預(yù)期的情況發(fā)生。若參數(shù)plr為NULL,則free。不會(huì)有任何作用。

3.malloc(配置內(nèi)存空間)

頭文獻(xiàn)

1#include<stdlib.h>

定義函數(shù)

1void*malloc(size_tsize);

函數(shù)說(shuō)明

malloc。用來(lái)配置內(nèi)存空間,其大小由指定的size決定。

返回值

若配置成功則返回一指針,失敗則返回NULLo

范例

voidp=malloc(1024);/*配置1k的內(nèi)存*/

(三)進(jìn)程操作篇

1、execl(執(zhí)行文獻(xiàn))

頭文獻(xiàn)

1#include<unistd.h>

定義函數(shù)

1intexecl(constchar*path,constchar*arg,....);

函數(shù)說(shuō)明

cxccK)用來(lái)執(zhí)行參數(shù)path字符串所代表的文獻(xiàn)途徑,接下來(lái)的參數(shù)代表執(zhí)行該文獻(xiàn)時(shí)傳遞過(guò)去

的argv(O)、argv[I]...,最后一個(gè)參數(shù)必須用空指針(NULL)作結(jié)束。

返回值

假如執(zhí)行成功則函數(shù)不會(huì)返回,執(zhí)行失敗則直接返回-1,失敗因素存于erm。中。

2、execlp(從PATH環(huán)境變量中查找文獻(xiàn)并執(zhí)行)

頭文獻(xiàn)

#include<unisld.h>

定義函數(shù)

1intexcclp(constchar*file,constchar*arg,.......);

函數(shù)說(shuō)明

execlp。會(huì)從PATH環(huán)境變量所指的目錄中查找符合參數(shù)tile的文獻(xiàn)名,找到后便執(zhí)行該文獻(xiàn),

然后將第二個(gè)以后的參數(shù)當(dāng)做該文獻(xiàn)的argv[0]、argv[l]……,最后一個(gè)參數(shù)必須用空指針

(NULL)作結(jié)束。

返回值

假如執(zhí)行成功則函數(shù)不會(huì)返回,執(zhí)行失敗則宜接返回-1,失敗因素存于erm。中。

錯(cuò)誤代碼

參考exeeve。。

3、exeev(執(zhí)行文獻(xiàn))

頭文獻(xiàn)

1#include<unistd.h>

定義函數(shù)

1intexecv(constchar*path,char*constargv[J);

函數(shù)說(shuō)明

execv()用來(lái)執(zhí)行參數(shù)path字符串所代表的文獻(xiàn)途徑,與execl。不同的地方在于execve。只甯兩

個(gè)參數(shù),第二個(gè)參數(shù)運(yùn)用數(shù)組指針來(lái)傳遞給執(zhí)行文獻(xiàn)。

返回值

假如執(zhí)行成功則函數(shù)不會(huì)返同,執(zhí)行失敗則直接返PM,失敗因素存于erm。中。

錯(cuò)誤代碼

請(qǐng)參考execve()。

4、execve(執(zhí)行文獻(xiàn))

頭文獻(xiàn)

1#include<unistd.h>

定義函數(shù)

1intexecve(constcharxfilename,char*constargvf],char*constenvpf1);

函數(shù)說(shuō)明

execve。用來(lái)執(zhí)行參數(shù)filename字符串所代表的文獻(xiàn)途徑,第二個(gè)參數(shù)系運(yùn)用數(shù)組指針來(lái)傳遞給

執(zhí)行文獻(xiàn),最后一個(gè)參數(shù)則為傳遞給執(zhí)行文獻(xiàn)的新環(huán)境變量數(shù)組.

返回值

假如執(zhí)行成功則函數(shù)不會(huì)返回,執(zhí)行失敗則直接返回-1,失敗因素存于erm。中。

錯(cuò)誤代碼

EACCES

1.欲執(zhí)行的文獻(xiàn)不具有用戶(hù)可執(zhí)行的權(quán)限。

2.欲執(zhí)行的文獻(xiàn)所屬的文獻(xiàn)系統(tǒng)是以noexec方式掛上。

3.欲執(zhí)行的文獻(xiàn)或script翻譯器非一般文獻(xiàn)。

EPERM

1.進(jìn)程處在被追蹤模式,執(zhí)行者并不具有root權(quán)限,欲執(zhí)行的文獻(xiàn)具有SUID或SGID位。

2.欲執(zhí)行的文獻(xiàn)所屬的文獻(xiàn)系統(tǒng)是以nosuid方式掛上,欲執(zhí)行的文獻(xiàn)具有SUID或SGID位

元,但執(zhí)行者并不具有r。。:權(quán)限。

E2BIG參數(shù)數(shù)組過(guò)大

ENOEXEC無(wú)法判斷欲執(zhí)行文獻(xiàn)的執(zhí)行文獻(xiàn)格式,有也許是格式錯(cuò)誤或無(wú)法在此平臺(tái)執(zhí)行。

EFAULT參數(shù)filename所指的字符串地址超過(guò)可存取空間范圍。

ENAMETOOLONG參數(shù)filename所指的字符串太長(zhǎng)。

ENOENT參數(shù)filename字符串所指定的文獻(xiàn)不存在。

ENOMEM核心內(nèi)存局限性

ENOTDIR參數(shù)filename字符串所包含的目錄途徑并非有效目錄

EACCES參數(shù)filename字符串所包含的目錄途徑無(wú)法存取,權(quán)限局限性

ELOOP過(guò)多的符號(hào)連接

ETXTBUSY欲執(zhí)行的文獻(xiàn)已被其他進(jìn)程打開(kāi)并且正把數(shù)據(jù)寫(xiě)入該文獻(xiàn)中

EIOI/O存取錯(cuò)誤

ENFILE已達(dá)成系統(tǒng)所允許的打開(kāi)文獻(xiàn)總數(shù)。

EMFILE已達(dá)成系統(tǒng)所允許單一進(jìn)程所能打開(kāi)的文獻(xiàn)總數(shù)。

EINVAL欲執(zhí)行文獻(xiàn)的ELF執(zhí)行格式不只一個(gè)PT」NTERP節(jié)區(qū)

EISDIRELF翻譯器為一目錄

ELIBBADELF翻譯器有問(wèn)題。

5、execvp(執(zhí)行文獻(xiàn))

頭文獻(xiàn)

1#include<unistd.h>

定義函數(shù)

1iniexecvp(constchar*file,char*constargv[]);

函數(shù)說(shuō)明

execvp()會(huì)從PATH環(huán)境變量所指的目錄中杳找符合參數(shù)file的文獻(xiàn)名,找到后便執(zhí)行該文獻(xiàn),

然后將第二個(gè)參數(shù)argv傳給該欲執(zhí)行的文獻(xiàn)。

返回值

假如執(zhí)行成功則函數(shù)不會(huì)返回,執(zhí)行失敗則直接返回-1,失敗因素存于erm。中。

錯(cuò)誤代碼

請(qǐng)參考execve()。

6、exit(正常結(jié)束進(jìn)程)

頭文獻(xiàn)

1#include<sldlib.h>

定義函數(shù)

1voidexit(intstatus);

函數(shù)說(shuō)明

exil()用來(lái)正常終結(jié)目前進(jìn)程的執(zhí)行,并把參數(shù)sialus返回給父進(jìn)程,而進(jìn)程所有的緩沖區(qū)數(shù)據(jù)

會(huì)自動(dòng)寫(xiě)回并關(guān)閉未關(guān)閉的文獻(xiàn)。

7、.exit(結(jié)束進(jìn)程執(zhí)行)

頭文獻(xiàn)

I#include<unistd.h>

定義函數(shù)

1void_exil(intstatus);

函數(shù)說(shuō)明

_exit()用來(lái)立刻結(jié)束目前進(jìn)程的執(zhí)行,并把參數(shù)status返給父進(jìn)程,并關(guān)閉未關(guān)閉的文獻(xiàn)。此

函數(shù)調(diào)用后不會(huì)返回,并且會(huì)傳遞SIGCHLD信號(hào)給父進(jìn)程,父進(jìn)程可以由wait函數(shù)取得子進(jìn)

程結(jié)束狀態(tài)。

附加說(shuō)明

_exit()不會(huì)解決標(biāo)準(zhǔn)DO緩沖區(qū),如要更新緩沖區(qū)請(qǐng)使用exit()。

8、vfork(建立一個(gè)新的進(jìn)程)

頭文獻(xiàn)

1#include<unistd.h>

定義函數(shù)

1pid_tvfork(void);

函數(shù)說(shuō)明

vfork()會(huì)產(chǎn)生一個(gè)新的子進(jìn)程,其子進(jìn)程會(huì)復(fù)制父進(jìn)程的數(shù)據(jù)與堆棧空間,并繼承父進(jìn)程的用

戶(hù)代碼.組代碼.環(huán)境變量、已打開(kāi)的文獻(xiàn)代碼、工作目最和資源限制等.Linux使用copy-on-

write(COW)技術(shù),只有當(dāng)其中一進(jìn)程試圖修改欲復(fù)制的空間時(shí)才會(huì)做真正的復(fù)制動(dòng)作,由于這

些繼承的信息是復(fù)制而來(lái),并非指相同的內(nèi)存空間,因此「進(jìn)程對(duì)這些變量的修改和父進(jìn)程并

不會(huì)同步。此外,子進(jìn)程不會(huì)繼承父進(jìn)程的文獻(xiàn)鎖定和未解決的信號(hào)。注意,Linux不保證子

進(jìn)程會(huì)比父進(jìn)程先執(zhí)行或晚執(zhí)行,因此編寫(xiě)程序時(shí)要留意

死鎖或競(jìng)爭(zhēng)條件的發(fā)生。

返回侑

假如vfork()成功則在父進(jìn)程會(huì)返回新建立的子進(jìn)程代碼(PID),而在新建立的子進(jìn)程中則返回

Oo假如vfork失敗則直接返回-1,失敗因素存于errno中。

錯(cuò)誤代碼

EAGAIN內(nèi)存局限性。ENOMEM內(nèi)存局限性,無(wú)法配置核心所需的數(shù)據(jù)結(jié)構(gòu)空間。

9、getpid(取得進(jìn)程辨認(rèn)碼)

頭文獻(xiàn)

1#include<unistd.h>

定義函數(shù)

1pid_tgetpid(void);

函數(shù)說(shuō)明

getpid()用來(lái)取得目前進(jìn)程的進(jìn)程辨認(rèn)碼,許多程序運(yùn)用取到的此值來(lái)建立臨時(shí)文獻(xiàn),以避犯

臨時(shí)文獻(xiàn)相同帶來(lái)的問(wèn)題。

返回值

目前進(jìn)程的進(jìn)程辨認(rèn)碼

10、getppid(取得父進(jìn)程的進(jìn)程辨認(rèn)碼)

頭文獻(xiàn)

1#include<unistd.h>

定義函數(shù)

1pid_tgetppid(void);

函數(shù)說(shuō)明

getppidO用來(lái)取得目前進(jìn)程的父進(jìn)程辨認(rèn)碼。

返回值

目前進(jìn)程的父進(jìn)程辨認(rèn)碼。

11、wait(等待子進(jìn)程中斷或結(jié)束)

頭文獻(xiàn)

1#inclnde<sys/types.h>

2#include<sys/wait.h>

定義函數(shù)

1pid_twait(int*status);

函數(shù)說(shuō)明

wait。會(huì)暫時(shí)停止目前進(jìn)程的執(zhí)行,直到有信號(hào)來(lái)到或子進(jìn)程結(jié)束。假如在調(diào)用wait。時(shí)子進(jìn)程

已經(jīng)結(jié)束,則wait()會(huì)立即返回子進(jìn)程結(jié)束狀態(tài)值。子進(jìn)程的結(jié)束狀態(tài)值會(huì)由參數(shù)status返回,

而子進(jìn)程的進(jìn)程辨認(rèn)碼也會(huì)一快返回。假如不在意結(jié)束狀態(tài)值,則

參數(shù)

status可以設(shè)成NULLo子進(jìn)程的結(jié)束狀態(tài)值請(qǐng)參考waitpid()o

返回值

假如執(zhí)行成功則返回子進(jìn)程辨認(rèn)碼(PID),假如有錯(cuò)誤發(fā)生則返回-1.失敗因素存于erm。中。

12、waitpid(等待子進(jìn)程中斷或結(jié)束)

頭文獻(xiàn)

1#include<sys/types.h>

2#include<sys/wait.h>

定義函數(shù)

1pid_twaitpid(pid_tpid,int*status,intoptions);

函數(shù)說(shuō)明

waiipid。會(huì)暫時(shí)停止目前進(jìn)程的執(zhí)行,直到有信號(hào)來(lái)到或子進(jìn)程結(jié)束。假如在調(diào)用wail。時(shí)子進(jìn)

程已經(jīng)結(jié)束,則wait。會(huì)立即返問(wèn)了?進(jìn)程結(jié)束狀態(tài)值。子逝程的結(jié)束狀態(tài)值會(huì)由參數(shù)status返

回,而子進(jìn)程的進(jìn)程辨認(rèn)碼也會(huì)一快返回。假如不在意結(jié)災(zāi)狀態(tài)值,則參數(shù)status可以設(shè)成

NULL。參數(shù)pid為欲等待的了進(jìn)程辨認(rèn)碼,其他數(shù)值意義如下;

pid<-l等待進(jìn)程組辨認(rèn)碼為pid絕對(duì)值的任何子進(jìn)程。

pid=-l等待任何子進(jìn)程,相稱(chēng)于wait。。

pid=O等待進(jìn)程組辨認(rèn)碼與目前進(jìn)程相同的任何子進(jìn)程。

pid>0等待任何子進(jìn)程辨認(rèn)碼為pid的子進(jìn)程。

參數(shù)option可認(rèn)為0或下面的OR組合

WNOHANG假如沒(méi)有任何已經(jīng)結(jié)束的了?進(jìn)程則立即返回,不予以等待。

WUNTRACED假如子進(jìn)程進(jìn)入暫停執(zhí)行情況則立即返回,但結(jié)束狀態(tài)不予以理睬。

子進(jìn)程的結(jié)束狀態(tài)返回后存于status,底下有幾個(gè)宏可判別結(jié)束情況

WIFEXITED(status)假如子進(jìn)程正常結(jié)束:則為非0值。

WEXITSTATUS(status)取得子進(jìn)程exit。返回的結(jié)束代碼,一般會(huì)先用WIFEXITED來(lái)判斷是否

正常結(jié)束才干使用此宏。

WIFSIGNALED(sunus)假如子進(jìn)程是由于信號(hào)而結(jié)束則此宏值為真

WTERMSIG(slatus)取得子進(jìn)程因信號(hào)而中止的信號(hào)代碼,一般會(huì)先用WIFSIGNALED來(lái)判斷

后才使用此宏。

WIFSTOPPED(status)假如子進(jìn)程處在暫停執(zhí)行情況則此宏值為真。一般只有使用

WUNTRACED時(shí)才會(huì)有此情況。

WSTOPSIG(status)取得引發(fā)子進(jìn)程暫停的信號(hào)代碼,一般會(huì)先用WIFSTOPPED來(lái)判斷后才使

用此宏。

返回值

假如執(zhí)行成功則返回子進(jìn)程辨認(rèn)碼(PID),假如有錯(cuò)誤發(fā)生則返回-1。失敗因素存于errn。中。

(四)信號(hào)解決篇

1、sigaction(查詢(xún)或設(shè)立信號(hào)解決方式)

頭文獻(xiàn)

1#include<signal.h>

定義函數(shù)

1intsigaction(intsignum,conststructsigaction*act.structsigaction*oldact);

函數(shù)說(shuō)明

sigaclion。會(huì)依參數(shù)signum指定的信號(hào)編號(hào)來(lái)設(shè)立該信號(hào)的解決函數(shù)。參數(shù)signum可以指定

SIGKILL和SIGSTOP以外的所有信號(hào)。

如參數(shù)結(jié)構(gòu)sigaction定義如下

1structsigaction

2{

3void(*sa_handler)(int);

4sigset_tsa_mask;

5intsa_flags;

6void(*sa_restorer)(void);

7)

sa_handler此參數(shù)和signal。的參數(shù)handler相同,代表新的信號(hào)解決函數(shù),其他意義請(qǐng)參考

signal。。

sa_mask用來(lái)設(shè)立在解決該信號(hào)時(shí)暫時(shí)將sa_mask指定的信號(hào)擱置。

sa_restorer此參數(shù)沒(méi)有使用。

用來(lái)設(shè)立信號(hào)解決的其他相關(guān)操作,下列的數(shù)值可用。

OR運(yùn)算(D組合

A.NOCLDSTOP:假如參數(shù)signum為SIGCHLD,則當(dāng)子進(jìn)程暫停時(shí)并不會(huì)告知父進(jìn)程

SA_ONESHOT/SA_RESETHAND:當(dāng)調(diào)用新的信號(hào)解決函數(shù)前,將此信號(hào)解決方式改為系統(tǒng)預(yù)

設(shè)的方式。

SA_RESTART:被信號(hào)中斷的系統(tǒng)調(diào)用會(huì)自行重啟

SA_NOMASK/SA_NODEFER:在解決此信號(hào)未結(jié)束前不理睬此信號(hào)的再次到來(lái)。

假如參數(shù)oldact不是NULL指針,則本來(lái)的信號(hào)解決方式會(huì)由此結(jié)構(gòu)sigaction返回。

返回值

執(zhí)行成功則返回0,假如有錯(cuò)誤則返回-1。

錯(cuò)誤代碼

EINVAL參數(shù)signum不合法,或是企圖攔截SIGKILL/SIGSTOPSIGKILL信號(hào)

EFAULT參數(shù)act,oldaci指針地址無(wú)法存取。

EINTR此調(diào)用被中斷

2、sigaddset(增長(zhǎng)一個(gè)信號(hào)至信號(hào)集)

頭文獻(xiàn)

1#include<signal.h>

定義函數(shù)

1intsigaddset(sigset_t^set,intsignum);

函數(shù)說(shuō)明

sigaddsel。用來(lái)將參數(shù)signum代表的信號(hào)加入至參數(shù)set信號(hào)集里。

返回值

執(zhí)行成功則返回0,假如有錯(cuò)誤則返回-1。

錯(cuò)誤代碼

EFAULT參數(shù)set指針地址無(wú)法存取

EINVAL參數(shù)signum非合法的信號(hào)編號(hào)

3、sigdelset(從信號(hào)集里刪除一個(gè)信號(hào))

頭文獻(xiàn)

1#inckide<signal.h>

定義函數(shù)

Iintsigdeisel(sigset_t*set,intsignum);

函數(shù)說(shuō)明

sigdelset。用來(lái)將參數(shù)signum代表的信號(hào)從參數(shù)set信號(hào)集里刪除。

返回值

執(zhí)行成功則返回0,假如有錯(cuò)誤則返回-1。

錯(cuò)誤代碼

EFAULT參數(shù)set指針地址無(wú)法存取

EINVAL參數(shù)signum非合法的信號(hào)編號(hào)

4、sigcmptysct(初始化信號(hào)集)

頭文獻(xiàn)

1#include<signaLh>

定義函數(shù)

1intsigemptyset(sigset_t*set);

函數(shù)說(shuō)明

sigempiysei()用來(lái)將參數(shù)set信號(hào)集初始化并清空。

返回值

執(zhí)行成功則返回0,假如有錯(cuò)誤則返回-1。

錯(cuò)誤代碼

EFAULT參數(shù)set指針地址無(wú)法存取

5、sigfillset(將所有信號(hào)加入至信號(hào)集)

頭文獻(xiàn)

1#include<signal.h>

定義函數(shù)

1intsigfillset(sigset_t*set);

函數(shù)說(shuō)明

sigfillsel。用來(lái)將參數(shù)sei信號(hào)集初始化,然后把所有的信號(hào)加入到此信號(hào)集里。

返回值

執(zhí)行成功則返回0,假如有錯(cuò)誤則返回-1。

附加說(shuō)明

EFAULT參數(shù)set指針地址無(wú)法存取

6、sigismember(測(cè)試某個(gè)信號(hào)是否已加入至信號(hào)集里)

頭文獻(xiàn)

1#include<signal.h>

定義函數(shù)

1intsigismember(constsigset_t*set,intsignum);

函數(shù)說(shuō)明

sigismember。用來(lái)測(cè)試參數(shù)signum代表的信號(hào)是否已加入至參數(shù)set信號(hào)集里。假如信號(hào)集里

已有該信號(hào)則返回1,否則返問(wèn)0。

返回值

信號(hào)集已有該信號(hào)則返回1,沒(méi)有則返回0。假如有錯(cuò)誤則返回-1。

錯(cuò)誤代碼

EFAULT參數(shù)set指針地址無(wú)法存取

EINVAL參數(shù)signum非合法的信號(hào)編號(hào)

7、signal(設(shè)立信號(hào)解決方式)

頭文獻(xiàn)

1#include<signal.h>

定義函數(shù)

1void(*signal(intsignum,void(*handler)(int)))(int);

函數(shù)說(shuō)明

signal。會(huì)依參數(shù)signum指定的信號(hào)編號(hào)來(lái)設(shè)立該信號(hào)的解決函數(shù)。當(dāng)指定的信號(hào)到達(dá)時(shí)就會(huì)跳

轉(zhuǎn)到參數(shù)handler指定的函數(shù)執(zhí)行。假如

參數(shù)handler不是函數(shù)指針,則必須是下列兩個(gè)常數(shù)之一:

SIGJGN忽略參數(shù)signum指定的信號(hào)。

SIG_DFL將參數(shù)signum指定的信號(hào)重設(shè)為核心預(yù)設(shè)的信號(hào)解決方式。

關(guān)干信號(hào)的編號(hào)和說(shuō)明,請(qǐng)參考附錄D

返回值

返回先前的信號(hào)解決函數(shù)指針,假如有錯(cuò)誤則返回SIG_ERR(-1).

附加說(shuō)明

在信號(hào)發(fā)生跳轉(zhuǎn)到自定的handler解決函數(shù)執(zhí)行后,系統(tǒng)會(huì)自動(dòng)將此解決函數(shù)換P1本來(lái)系統(tǒng)預(yù)設(shè)

的解決方式,假如要改變此操作請(qǐng)改用

sigaction()o

8、sleep(讓進(jìn)程暫停執(zhí)行一段時(shí)間)

頭文獻(xiàn)

1#include<unistd.h>

定義函數(shù)

1unsignedintsleep(unsignedintseconds);

函數(shù)說(shuō)明

sleep。會(huì)令目前的進(jìn)程暫停,直到達(dá)成參數(shù)seconds所指定的時(shí)間,或是被信號(hào)所中斷。

返回值

若進(jìn)程暫停到參數(shù)seconds所指定的時(shí)間則返回0,若有信號(hào)中斷則返回剩余秒數(shù)。

9、perror(打印犯錯(cuò)誤因素信息字符串)

頭文獻(xiàn)

1#include<stdio.h>

定義函數(shù)

1voidperror(constchar*s);

函數(shù)說(shuō)明

perror()用來(lái)將上一個(gè)函數(shù)發(fā)生錯(cuò)誤的因素輸出到標(biāo)準(zhǔn)錯(cuò)誤(stderr)。參數(shù)s所指的字符串會(huì)先打

印出,后面再加上錯(cuò)誤因素字符串。此

錯(cuò)誤因素依照全局變量errno的值來(lái)決定要輸出的字符串。

返回值

10、mkfifo(建立具名管道)

頭文獻(xiàn)

1#inckide<sys/types.h>

2#include<sys/stat.h>

定義函數(shù)

1intmkfifo(conslchar*pathname,mode_tmode);

函數(shù)說(shuō)明

mkfifo。會(huì)依參數(shù)pathname建立特殊的FIFO文獻(xiàn),該文獻(xiàn)必須不存在,而參數(shù)mode為該文獻(xiàn)

的權(quán)限(mode%~umask),因此umask值也會(huì)

影響到FIFO文獻(xiàn)的權(quán)限。Mkfifo。建立的FIFO文獻(xiàn)其他進(jìn)程都可以用讀寫(xiě)一般文獻(xiàn)的方式存

取。當(dāng)使用open()來(lái)打開(kāi)FIFO文獻(xiàn)時(shí),

O_NONBLOCK旗標(biāo)會(huì)有影響

1、當(dāng)使用O_NONBLOCK旗標(biāo)時(shí),打開(kāi)FIFO文獻(xiàn)來(lái)讀取的操作會(huì)立刻返回,但是若還沒(méi)有其

他進(jìn)程打開(kāi)FIFO文獻(xiàn)來(lái)讀取,則寫(xiě)入的操作會(huì)

返回ENXIO錯(cuò)誤代碼。

2、沒(méi)有使用O_NONBLOCK旗標(biāo)時(shí),打開(kāi)FIFO來(lái)讀取的操作會(huì)等到其他進(jìn)程打開(kāi)FIFO文獻(xiàn)

來(lái)寫(xiě)入才正常返回。同樣地,打開(kāi)FIFO文獻(xiàn)來(lái)寫(xiě)

入的操作會(huì)等到其他進(jìn)程打開(kāi)FIFO文獻(xiàn)來(lái)讀取后才正常返回。

返回值

若成功則返回0,否則返回-1,錯(cuò)誤因素存于errn。中。

錯(cuò)誤代碼

EACCESS參數(shù)pathname所指定的目錄途徑無(wú)可執(zhí)行的權(quán)限

EEXIST參數(shù)pathname所指定的文獻(xiàn)已存在。

ENAMETOOLONG參數(shù)pathname的途徑名稱(chēng)太長(zhǎng)。

ENOENT參數(shù)pathname包含的目錄不存在

ENOSPC文獻(xiàn)系統(tǒng)的剩余空間局限性

ENOTDIR參數(shù)pathname途徑中的目錄存在但卻非真正的目錄。

EROFS參數(shù)pathname指定的文獻(xiàn)存在于只讀文獻(xiàn)系統(tǒng)內(nèi)。

11、pclose(關(guān)閉管道I/O)

頭文獻(xiàn)

1#includc<stdio.h>

定義函數(shù)

1inipclose(FILE*stream);

函數(shù)說(shuō)明

pclose。用來(lái)關(guān)閉由popen所建立的管道及文獻(xiàn)指針。參數(shù)stream為先前由popen。所返網(wǎng)的文

獻(xiàn)指針。

返回值

返回子進(jìn)程的結(jié)束狀態(tài)。假如有錯(cuò)誤則返回-1,錯(cuò)誤因素存于errno中。

錯(cuò)誤代碼

ECHILDpclose。無(wú)法取得子進(jìn)程的結(jié)束狀態(tài)。

12、pipe(建立管道)

頭文獻(xiàn)

1#include<unistd.h>

定義函數(shù)

1intpipe(intfiledes[2]);

函數(shù)說(shuō)明

pipe。會(huì)建立管道,并將文獻(xiàn)描述詞由參數(shù)filedes數(shù)組返回。filedes[O]為管道里的讀取端,

filedes⑴則為管道的寫(xiě)入端。

返回值

若成功則返回零,否則返回錯(cuò)誤因素存于errn。中。

錯(cuò)誤代碼

EMFILE進(jìn)程已用完文獻(xiàn)描述詞最大量。

ENFILE系統(tǒng)已無(wú)文獻(xiàn)描述詞可用。

EFAULT參數(shù)filedes數(shù)組地址不合法。

13、popen(建立管道I/O)

頭文獻(xiàn)

1#include<stdio.h>

定義函數(shù)

IFILE*popen(constchar*command,conslchar*type);

函數(shù)說(shuō)明

popen。會(huì)調(diào)用fork。產(chǎn)生子進(jìn)程,然后從子進(jìn)程中調(diào)用/bin/sh-c來(lái)執(zhí)行參數(shù)command的指令。

參數(shù)type可使用“r”代表讀取,“w”代

表寫(xiě)入。依照此type值,popen。會(huì)建立管道連到子進(jìn)程的標(biāo)準(zhǔn)輸出設(shè)備或標(biāo)準(zhǔn)輸入設(shè)備,然后

返回一個(gè)文獻(xiàn)指針。隨后送程便可運(yùn)用此

文獻(xiàn)指針來(lái)讀取子進(jìn)程的輸出設(shè)備或是寫(xiě)入到子進(jìn)程的標(biāo)準(zhǔn)輸入設(shè)備中。此外,所有使用文獻(xiàn)

指針(FILE*)操作的函數(shù)也都可以使用,除

了fclose。以外。

返回值

若成功則返回文獻(xiàn)指針,否則返回NULL,錯(cuò)誤因素存于errno中。

錯(cuò)誤代碼

EINVAL參數(shù)type不合法。

注意事項(xiàng)

在編寫(xiě)具SUID/SGID權(quán)限的程序時(shí)請(qǐng)盡量避免使用popen(),popen()會(huì)繼承環(huán)境變量,通過(guò)環(huán)

境變量也許會(huì)導(dǎo)致系統(tǒng)安全的問(wèn)題。

(五)接口解決篇

1、accept(接受socket連線)

頭文獻(xiàn)

1#include<sys/types.h>

2#include<sys/socket.h>

定義函數(shù)

1intaccept(ints,structsockaddr*addr,int*addrlen);

函數(shù)說(shuō)明

accepi。用來(lái)接受參數(shù)s的sockel連線。參數(shù)s的socket必需先經(jīng)bind。、listen。函數(shù)解決過(guò),當(dāng)

有連線進(jìn)來(lái)時(shí)accept。會(huì)返回一個(gè)新的

socket解決代碼,往后的數(shù)據(jù)傳送與讀取就是經(jīng)由新的socket解決,而本來(lái)參數(shù)s的sockel能

繼續(xù)使用accept。來(lái)接受新的連線規(guī)定。連

線成功時(shí),參數(shù)addr所指的結(jié)構(gòu)會(huì)被系統(tǒng)填入遠(yuǎn)程主機(jī)的地址數(shù)據(jù),參數(shù)addrlen為scokaddr

的結(jié)構(gòu)長(zhǎng)度。關(guān)于結(jié)構(gòu)sockaddr的定義請(qǐng)參

考bind()o

返回值

成功則返回新的socket解決代碼,失敗返回-1,錯(cuò)誤因素存于erm。中。

錯(cuò)誤代碼

EBADF參數(shù)s非合法sockel解決代碼。

EFAULT參數(shù)addr指針指向無(wú)法存取的內(nèi)存空間。

ENOTSOCK參數(shù)s為一文獻(xiàn)描述詞,非socket。

EOPNOTSUPP指定的socket并非SOCK_STREAMo

EPERM防火墻拒絕此連線。

ENOBUFS系統(tǒng)的緩沖內(nèi)存局限性。

ENOMEM核心內(nèi)存局限性。

2、bind(對(duì)socket定位)

頭文獻(xiàn)

1#include<sys/types.h>

2#include<sys/socket.h>

定義函數(shù)

1intbind(intsockfd,structsockaddr*my_addr,intaddrlen);

函數(shù)說(shuō)明

bind。用來(lái)設(shè)立給參數(shù)sockfd的socket一個(gè)名稱(chēng)。此名稱(chēng)由參數(shù)my_addr指向一sockaddr

構(gòu),對(duì)于不同的socketdomain定義了一個(gè)通

用的數(shù)據(jù)結(jié)構(gòu)

1structsockaddr

2{

3unsignedshortintsa_family;

4charsa_data[14];

5};

sa_family為調(diào)用socket()時(shí)的domain參數(shù),即AF_xxxx值。

sa_daia最多使用14個(gè)字符長(zhǎng)度。

此sockaddr結(jié)構(gòu)會(huì)因使用不同的socketdomain而有不同結(jié)構(gòu)定義,例如使用AF_INET

domain,其sockeladdr結(jié)構(gòu)定義便為

國(guó)

1structsocketaddr_in

2{

3unsignedshortintsin_family;

4uint!6_tsin_port;

5structin_addrsin_addr;

6unsignedcharsin_zero[8];

7};

8structin_addr

9{

1()uint32_ts_addr;

H);

5

sin_family即為sa_family

sin_port為使用的port編號(hào)

sin_addr.s_addr為IP地址

sin_zero未使用。

參數(shù)

addrlen為sockaddr的結(jié)構(gòu)長(zhǎng)度。

返回值

成功則返回0,失敗返回-1,錯(cuò)誤因素存于errno中。

錯(cuò)誤代碼

EBADF參數(shù)sockfd非合法sockcl解決代碼。

EACCESS權(quán)限局限性

ENOTSOCK參數(shù)sockfd為一文獻(xiàn)描述詞,非socketo

3、connect(建立socket連線)

頭文獻(xiàn)

1#include<sys/types.h>

2#include<sys/sockel.h>

定義函數(shù)

1intconnect(intsockfd,structsockaddr*serv_addr,intaddrlen);

函數(shù)說(shuō)明

connect。用來(lái)將參數(shù)sockfd的socket連至參數(shù)serv_addr指定的網(wǎng)絡(luò)地址。結(jié)構(gòu)sockaddr請(qǐng)參考

bind。。參數(shù)addrlen為sockaddr的結(jié)

構(gòu)長(zhǎng)度。

返回值

成功則返回0,失敗返回-1,錯(cuò)誤因素存于errno中。

錯(cuò)誤代碼

EBADF參數(shù)sockfd非合法socket解決代碼

EFAULT參數(shù)serv_addr指引指向無(wú)法存取的內(nèi)存空間

ENOTSOCK參數(shù)sockfd為一文獻(xiàn)描述詞,非socket。

EISCONN參數(shù)sockfd的socket已是連線狀態(tài)

ECONNREFUSED連線規(guī)定被server端拒絕。

ETIMEDOUT企圖連線的操作超過(guò)限定期間仍未有響應(yīng)。

ENETUNREACH無(wú)法傳送數(shù)據(jù)包至指定的主機(jī)。

EAFNOSUPPORTsockaddr結(jié)構(gòu)的sa_family不對(duì)的。

EALREADYsocket為不可阻斷且先前的連線操作尚未完畢。

4、htonl(將32位主機(jī)字符順序轉(zhuǎn)換成網(wǎng)絡(luò)字符順序)

頭文獻(xiàn)

1#include<netinet/in.h>

定義函數(shù)

1unsignedlonginthtonl(unsignedlonginthostlong);

函數(shù)說(shuō)明

htonl()用來(lái)將參數(shù)指定的32位hosilong轉(zhuǎn)換成網(wǎng)絡(luò)字符順序。

返回值

返回相應(yīng)的網(wǎng)絡(luò)字符順序。

5、htons(將16位主機(jī)字符順序轉(zhuǎn)換成網(wǎng)絡(luò)字符順序)

頭文獻(xiàn)

1#include<netinet/in.h>

定義函數(shù)

1unsignedshortinthtons(unsigncdshortinthostshort);

函數(shù)說(shuō)明

hions()用來(lái)將參數(shù)指定的15位hosishort轉(zhuǎn)換成網(wǎng)絡(luò)字符順序。

返回值

返回相應(yīng)的網(wǎng)絡(luò)字符順序。

6、inejaddr(將網(wǎng)絡(luò)地址轉(zhuǎn)成二進(jìn)制的數(shù)字)

頭文獻(xiàn)

I#incln(ie<sys/socket.h>

2#include<netinet/in.h>

3#include<arpa/inet.h>

定義函數(shù)

1unsignedlongintinct_addr(constchar*cp);

函數(shù)說(shuō)明

inct_addr()用來(lái)將參數(shù)cp所指的網(wǎng)絡(luò)地址字符串轉(zhuǎn)換成網(wǎng)絡(luò)所使用的二進(jìn)制數(shù)字。網(wǎng)絡(luò)地玨字

符串是以數(shù)字和點(diǎn)組成的字符串,例

如:“163.13.132.68”。

返回值

成功則返回相應(yīng)的網(wǎng)絡(luò)二進(jìn)制的數(shù)字,失敗返回-1。

7.inct_aton(將網(wǎng)絡(luò)地址轉(zhuǎn)成網(wǎng)絡(luò)二進(jìn)制的數(shù)字)

頭文獻(xiàn)

1#include<sys/scoket.h>

2#include<netinet/in.h>

3#include<arpa/inel.h>

定義函數(shù)

1intinet_aton(constchar*cp,structin_addr*inp);

函數(shù)說(shuō)明

inejaion。用來(lái)將參數(shù)cp所指的網(wǎng)絡(luò)地址字符串轉(zhuǎn)換成網(wǎng)絡(luò)使用的二進(jìn)制的數(shù)字,然后存于參

數(shù)inp所指的in_addr結(jié)構(gòu)中。

結(jié)構(gòu)in_addr定義如下

structinaddr

unsignedlongints_addr;

};

返回值

成功則返回非。值,失敗則返回0。

8.inet.ntoa(將網(wǎng)絡(luò)二進(jìn)制的數(shù)字轉(zhuǎn)換成網(wǎng)絡(luò)地址)

頭文獻(xiàn)

1#includc<sys/sockct.h>

2#includc<netinet/in.h>

3#include<arpa/inet.h>

定義函數(shù)

1char*inel_ntoa(slructin_addrin);

函數(shù)說(shuō)明

incjntoaO用來(lái)將參數(shù)in所指的網(wǎng)絡(luò)二進(jìn)制的數(shù)字轉(zhuǎn)換成網(wǎng)絡(luò)地址,然后將指向此網(wǎng)絡(luò)地址字

符串的指針?lè)祷亍?/p>

返回值

成功則返回字符串指針,失敗則返回NULLo

9、listen(等待連接)

頭文獻(xiàn)

1#include<sys/socket.h>

定義函數(shù)

1intlisten(ints,intbacklog);

函數(shù)說(shuō)明

listen。用來(lái)等待參數(shù)s的socket連線。參數(shù)backlog指定同時(shí)能解決的最大連接規(guī)定,假如連接

數(shù)目達(dá)此上限則client端將收到

ECONNREFUSED的錯(cuò)誤。Lis【en()并未開(kāi)始接受連線,只是設(shè)立sockel為listen模式,真正接

受client端連線的是accept()o通常lis(en()

會(huì)在socket。,bind。之后調(diào)用,接著才調(diào)用accept。。

返回值

成功則返回0,失敗返回-1,錯(cuò)誤因素存于errn。

附加說(shuō)明

lisien()只合用SOCK.STREAM或SOCK_SEQPACKET的socket類(lèi)型。假如socket為AF_INET

則參數(shù)backlog最大俏可設(shè)至128o

錯(cuò)誤代碼

EBADF參數(shù)sockfd非合法socket解決代碼

EACCESS權(quán)限局限性

EOPNOTSUPP指定的socket并未支援listen模式。

10、nlohl(將32位網(wǎng)絡(luò)字符順序轉(zhuǎn)換成主機(jī)字符順序)

頭文獻(xiàn)

1#include<netinet/in.h>

定義函數(shù)

1unsignedlongintntohl(unsignedlongintnetlong);

函數(shù)說(shuō)明

ntohl。用來(lái)將參數(shù)指定的32位netlong轉(zhuǎn)換成主機(jī)字符順序.

返回值

返回相應(yīng)的主機(jī)字符順序。

11、ntohs(將16位網(wǎng)絡(luò)字符順序轉(zhuǎn)換成主機(jī)字符順序)

頭文獻(xiàn)

I#include<netinet/in.h>

定義函數(shù)

1unsignedshortintntohs(unsignedshortintnetshort);

函數(shù)說(shuō)明

ntohs()用來(lái)將參數(shù)指定的16位netshort轉(zhuǎn)換成主機(jī)字符順序。

返回值

返網(wǎng)相應(yīng)的主機(jī)順序。

12、recv(經(jīng)socket接受數(shù)據(jù))

頭文獻(xiàn)

1#include<sys/types.h>

2#include<sys/socket.h>

定義函數(shù)

1intrccv(ints,void*buf,intlen,unsignedintflags);

函數(shù)說(shuō)明

recv()用來(lái)接受遠(yuǎn)端主機(jī)經(jīng)指定的socket傳來(lái)的數(shù)據(jù),并把數(shù)據(jù)存到由參數(shù)buf指向的內(nèi)存空

間,參數(shù)len為可接受數(shù)據(jù)的最大長(zhǎng)度。

參數(shù)

tlags一般設(shè)0。其他數(shù)值定義如下:

MSG_OOB接受以out-of-band送出的數(shù)據(jù)。

MSG_PEEK返回來(lái)的數(shù)據(jù)并不會(huì)在系統(tǒng)內(nèi)刪除,假如再調(diào)用recv()會(huì)返回相同的數(shù)據(jù)內(nèi)容.

MSG_WAITALL逼迫接受到len大小的數(shù)據(jù)后才干返回,除非有錯(cuò)誤或信號(hào)產(chǎn)生。

MSG_NOSIGNAL此操作不愿被SIGPIPE信號(hào)中斷返回值成功則返回接受到的字符數(shù),失敗返

回-1,錯(cuò)誤因素存于errno中。

錯(cuò)誤代碼

EBADF參數(shù)s非合法的socket解決代碼

EFAULT參數(shù)中有一指針指向無(wú)法存取的內(nèi)存空間

ENOTSOCK參數(shù)s為一文獻(xiàn)描述詞,非socket。

EINTR被信號(hào)所中斷

EAGAIN此動(dòng)作會(huì)令進(jìn)程阻斷,但參數(shù)s的socket為不可阻斷

ENOBUFS系統(tǒng)的緩沖內(nèi)存局限性。

EN0MEM核心內(nèi)存局限性

EINVAL傳給系統(tǒng)調(diào)用的參數(shù)不對(duì)的。

13、reevfrom(經(jīng)socket接受數(shù)據(jù))

相關(guān)函數(shù)

recv,recvmsgtsend,sendto,socket

頭文獻(xiàn)

1#include<sys/types.h>

2#include<sys/socket.h>

定義函數(shù)

1intrecvfrom(ints,void*buf,intlen,unsignedintflags,structsockaddr*from,int

*fromlen);

函數(shù)說(shuō)明

recv()用來(lái)接受遠(yuǎn)程主機(jī)經(jīng)指定的socket傳來(lái)的數(shù)據(jù),并把數(shù)據(jù)存到由參數(shù)buf指向的內(nèi)存空

間,參數(shù)len為可接受數(shù)據(jù)的最大長(zhǎng)度。參

數(shù)flags一般設(shè)0,其他數(shù)值定義請(qǐng)參考recv()。參數(shù)from用來(lái)指定欲傳送的網(wǎng)絡(luò)地址,結(jié)構(gòu)

sockaddr請(qǐng)參考bind。。參數(shù)fromlen為

sockaddr的結(jié)構(gòu)長(zhǎng)度。

返回值

成功則返回接受到的字符數(shù),失敗則返回-1,錯(cuò)誤因素存于errno中。

錯(cuò)誤代碼

EBADF參數(shù)s非合法的socket解決代碼

EFAULT參數(shù)中有一指針指向無(wú)法存取的內(nèi)存空間。

ENOTSOCK參數(shù)s為一文獻(xiàn)描述詞,非socket。

EINTR被信號(hào)所中斷。

EAGAIN此動(dòng)作會(huì)令進(jìn)程阻斷,但參數(shù)s的socket為不可阻斷。

ENOBUFS系統(tǒng)的緩沖內(nèi)存局限性

EN0MEM核心內(nèi)存局限性

EINVAL傳給系統(tǒng)調(diào)用的參數(shù)不對(duì)的。

14、reevmsg(經(jīng)socket接受數(shù)據(jù))

頭文獻(xiàn)

1#include<sys/types.h>

2#include<sys/socktet.h>

定義函數(shù)

1intrecvmsg(ints,structmsghdr*msg,unsignedintflags);

函數(shù)說(shuō)明

recvmsgO用來(lái)接受遠(yuǎn)程主機(jī)經(jīng)指定的socket傳來(lái)的數(shù)據(jù)。參數(shù)s為已建立好連線的socket,假

如運(yùn)用UDP協(xié)議則不需通過(guò)連線操作。參

數(shù)msg指向欲連線的數(shù)據(jù)結(jié)構(gòu)內(nèi)容,參數(shù)flags一般設(shè)0,具體描述請(qǐng)參考send。。關(guān)于結(jié)構(gòu)

msghdr的定義請(qǐng)參考sendmsgO。

返回值

成功則返回接受到的字符數(shù),失敗則返回“,錯(cuò)誤因素存于errn。中。

錯(cuò)誤代碼

EBADF參數(shù)s非合法的socket解決代碼。

EFAULT參數(shù)中有一指針指向無(wú)法存取的內(nèi)存空間

ENOTSOCK參數(shù)s為一文獻(xiàn)描述詞,非socket0

EINTR被信號(hào)所中斷。

EAGAIN此操作會(huì)令進(jìn)程阻斷,但參數(shù)s的socket為不可阻斷。

ENOBUFS系統(tǒng)的緩沖內(nèi)存局限件

ENOMEM核心內(nèi)存局限性

EINVAL傳給系統(tǒng)調(diào)用的參數(shù)不對(duì)的。

15、send(經(jīng)socket傳送數(shù)據(jù))

頭文獻(xiàn)

I#include<sys/types.h>

2#include<sys/socket.h>

定義函數(shù)

1intsend(ints,constvoid*msg,intlen,unsignedintfalgs);

函數(shù)說(shuō)明

send。用來(lái)將數(shù)據(jù)由指定的socket傳給對(duì)方主機(jī)。參數(shù)s為已建立好連接的socket0參數(shù)msg指

向欲連線的數(shù)據(jù)內(nèi)容,參數(shù)len則為數(shù)據(jù)長(zhǎng)

度。參數(shù)flags一般設(shè)0,其他數(shù)值定義如下

MSG_OOB傳送的數(shù)據(jù)以cut-of-band送出。

MSG_DONTROUTE取消路由表查詢(xún)

MSG_DONTWAIT設(shè)立為不可阻斷運(yùn)作

MSG_NOSIGNAL此動(dòng)作不愿被SIGPIPE信號(hào)中斷,

返回侑

成功則返回實(shí)際傳送出去的字符數(shù),失敗返回-1。錯(cuò)誤因素存于erm。

錯(cuò)誤代碼

EBADF參數(shù)s非合法的socket解決代碼。

EFAULT參數(shù)中有一指針指向無(wú)法存取的內(nèi)存空間

ENOTSOCK參數(shù)s為一文獻(xiàn)描述詞,非socket

EINTR被信號(hào)所中斷。

EAGAIN此操作會(huì)令進(jìn)程阻斷,但參數(shù)s的socket為不可阻斷。

ENOBUFS系統(tǒng)的緩沖內(nèi)存局限性

EN0MEM核心內(nèi)存局限性

EINVAL傳給系統(tǒng)調(diào)用的參數(shù)不對(duì)的。

16、sendmsg(經(jīng)socket傳送數(shù)據(jù))

頭文獻(xiàn)

1#include<sys/types.h>

2#include<sys/socket.h>

定義函數(shù)

Iintsendmsg(ints,conststrcutmsghdr*msg,unsignedintflags);

函數(shù)說(shuō)明

sendmsg。用來(lái)將數(shù)據(jù)由指定的socket傳給對(duì)方主機(jī)。參數(shù),為己建立好連線的socket,假如運(yùn)

用UDP協(xié)議則不需通過(guò)連線操作。參數(shù)msg

指向欲連線的數(shù)據(jù)結(jié)構(gòu)內(nèi)容,參數(shù)flags一般默認(rèn)為0,具體描述請(qǐng)參考send。。

結(jié)構(gòu)msghdr定義如下

1structmsghdr

2{

3void*msg_name;/*Addresstosendto/receivefrom.*/

4socklen_tmsg_namelen;/*Lengthofaddresdata*/

5strcutiovec*msg_iov;/*Vectorofdatatoscnd/rcccivcinto*/

6size_tmsg_iovlen;/*Numberofelementsinthevector*/

7void*msg_control;/*Ancillarydat*/

8size_tmsg_controllen;/*Ancillarydatabufferlength*/

9intmsg_flags;/*Flagsonreceivedmessage*/

10);

返回值

成功則返回實(shí)際傳送出去的字符數(shù),失敗返問(wèn)-1,錯(cuò)誤因素存于erm。

錯(cuò)誤代碼

EBADF參數(shù)s非合法的socket解決代碼。

EFAULT參數(shù)中有一指針指向無(wú)法存取的內(nèi)存空間

ENOTSOCK參數(shù)s為一文獻(xiàn)描述詞,非socket。

EINTR被信號(hào)所中斷。

EAGAIN此操作會(huì)令進(jìn)程阻斷,但參數(shù)s的socket為不可阻斷。

ENOBUFS系統(tǒng)的緩沖內(nèi)存局限性

ENOMEM核心內(nèi)存局限性

EINVAL傳給系統(tǒng)調(diào)用的參數(shù)不對(duì)的。

17、sendto(經(jīng)socket傳送數(shù)據(jù))

頭文獻(xiàn)

1#include<sys/types.h>

2#include<sys/socket.h>

定義函數(shù)

1intsendto(ints,constvoid*msg,intlen,unsignedintflags,conststructsockaddr

*to,intlolen);

函數(shù)說(shuō)明

sendtoO用來(lái)將數(shù)據(jù)由指定的socket傳給對(duì)方主機(jī)。參數(shù)s為已建好連線的socket,假如運(yùn)用

UDP協(xié)議則不需通過(guò)連線操作。參數(shù)msg指向

欲在線的數(shù)據(jù)內(nèi)容,參數(shù)flags一般設(shè)0,具體描述請(qǐng)參考send。。參數(shù)2用來(lái)指定欲傳送的網(wǎng)

絡(luò)地址,結(jié)構(gòu)sockaddr請(qǐng)參考bind。。參數(shù)

tolen為sockaddr的結(jié)果長(zhǎng)度。

返回值

成功則返回實(shí)際傳送出去的字符數(shù),失敗返回一1,錯(cuò)誤因素存于erm。中。

錯(cuò)誤代碼

EBADF參數(shù)s非法的socket解決代碼。

EFAULT參數(shù)中有一指針指向無(wú)法存取的內(nèi)存空間。

WNOTSOCKcanshus為一文獻(xiàn)描述詞,非socket。

EINTR被信號(hào)所中斷。

EAGAIN此動(dòng)作會(huì)令進(jìn)程阻斷,但參數(shù)s的sokct為補(bǔ)課阻斷的。

ENOBUFS系統(tǒng)的緩沖內(nèi)存局限件。

EINVAL傳給系統(tǒng)調(diào)用的參數(shù)不對(duì)的。

I8^socket(建立一個(gè)socket通信)

頭文獻(xiàn)

1#include<sys/types.h>

2#include<sys/socket.h>

定義函數(shù)

1intsockct(intdomain,inttype,intprotocol);

函數(shù)說(shuō)明

socket。用來(lái)建立一個(gè)新的socket,也就是向系統(tǒng)注冊(cè),告知系統(tǒng)建立一通信端口。參數(shù)domain

指定使用何種的地址類(lèi)型,完整的定義

^/usr/include/bits/socket.h內(nèi),底下是常見(jiàn)的協(xié)議:

PF_UNIX/PF_LOCAL/AF_UNIX/AF_LOCALUNIX進(jìn)程通信協(xié)議

PF_INET?AF_INETIpv4網(wǎng)絡(luò)協(xié)議

PF_INET6/AF_INET6Ipv6網(wǎng)絡(luò)協(xié)議

PF_IPX/AFJPXIPX-Novell協(xié)議

PF_NETLINK/AF_NETLINK核心用戶(hù)接口裝置

PF_X25/AF_X25ITU-TX.25/ISO-8208協(xié)議

PF_AX25/AF_AX25業(yè)余無(wú)線AX.25協(xié)議

PF_ATMPVC/AF_ATMPVC存取原始ATMPVCs

PF_APPLETALK/AF_APPLETALKappletalk(DDP)協(xié)議

PF_PACKET/AF_PACKET初級(jí)封包接口

參數(shù)

type有下列幾種數(shù)值:

SOCK_STREAM提供雙向連續(xù)且可信賴(lài)的數(shù)據(jù)流,即TCP。支持

OOB機(jī)制,在所有數(shù)據(jù)傳送前必須使用connect。來(lái)建立連線狀態(tài)。

SOCK_DGRAM使用不連續(xù)不可信賴(lài)的數(shù)據(jù)包連接

SOCK_SEQPACKET提供連續(xù)可信賴(lài)的數(shù)據(jù)包連接

SOCK.RAW提供原始網(wǎng)絡(luò)協(xié)議存取

SOCK_RDM提供可信賴(lài)的數(shù)據(jù)包連接

SOCK_PACKET提供和網(wǎng)絡(luò)驅(qū)動(dòng)程序直接通信。

protocol用來(lái)指定socket所使用的傳輸協(xié)議編號(hào),通常此參考不用管它,設(shè)為0即可。

返回值

成功則返回sockel解決代碼,失敗返回-屋

錯(cuò)誤代碼

EPROTONOSUPPORT參數(shù)domain指定的類(lèi)型不支持參數(shù)type或protocol指定的協(xié)議

ENFILE核心內(nèi)存局限性,無(wú)法建立新的socket結(jié)構(gòu)

EMFILE進(jìn)程文獻(xiàn)表溢出,無(wú)法再建立新的socket

EACCESS權(quán)限局限性,無(wú)法建立type或protocol指定的協(xié)議

ENOBUFS/ENOMEM內(nèi)存局限性

EINVAL參數(shù)domain/type/protocol不合法

(六)環(huán)境變量篇

1、getenv(取得環(huán)境變量?jī)?nèi)容)

頭文幀

1#include<stdlib.h>

定義函數(shù)

1char*getenv(constchar*name);

函數(shù)說(shuō)明

geie

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論