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

下載本文檔

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

文檔簡介

(-)文獻操作篇

1、creat(建立文獻)

頭文獻

1#include<sys/types.h>

2#include<sys/stat.h>

3#include<fcntl.h>

定義函數(shù)

1intcreat(constchar*pathname,mode_tmode);

函數(shù)說明

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

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

錯誤代碼

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

返回值

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

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

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

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

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

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

ENAMETOOLONG參數(shù)pathname太長。

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

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

ELOOP參數(shù)paihname有過多符號連接問題。

EMFILE已達成進程可同時打開的文獻數(shù)上限

ENFILE已達成系統(tǒng)可同時打開的文獻數(shù)上限

附加說明

creat()無法建立特別的裝置文獻,假如需要請使用mknod(),

2、open(打開文獻)

頭文獻

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ù)說明

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

O.RDONLY以只讀方式打開文獻

O_WRONLY以只寫方式打開文獻

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

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

O_CREAT若欲打開的文獻不存在則自動建立該文獻。

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

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

為符號連接,則會打開文獻失敗。

O_NOCTTY假如欲打開的文獻為終端機設(shè)備時,則不會將該終端機當(dāng)成進程控制終端機。

O_TRUNC若文獻存在并且以可寫的方式打開時,此旗標(biāo)會令文獻長度清為0,而本來存于該

文獻的資料也會消失。

O_APPEND當(dāng)讀寫文獻時會從文獻尾開始移動,也就是所寫入的數(shù)據(jù)會以附加的方式加入到文

獻后面。

O_NONBLOCK以不可阻斷的方式打開文獻,也就是無論有無數(shù)據(jù)讀取或等待,都會立即返回

進程之中。

O.NDELAY同O_NONBLOCK。

O_SYNC以同步的方式打開文獻。

O_NOFOLLOW假如參數(shù)pathname所指的文獻為一符號連接,則會令打開文獻失敗。

O_DIRECTORY假如參數(shù)pathname所指的文獻并非為一目錄,則會令打開文獻失敗。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

返回值

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

錯誤代碼

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

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

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

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

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

ENAMETOOLONG參數(shù)pathname太長。

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

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

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

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

無法預(yù)期。

錯誤代碼

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

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

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

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

頭文獻

I#include<unistd.h>

定義函數(shù)

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

函數(shù)說明

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

也會隨之移動。

返回值

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

錯誤代碼

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

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

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

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

頭文獻

1#include<sys/file.h>

定義函數(shù)

1intflock(intfd,intoperation);

函數(shù)說明

flock。會依參數(shù)operation所指定的方式對參數(shù)fd所指的文獻做各種鎖定或解除鎖定的動作。此

函數(shù)只能鎖定整個文獻,無法鎖定文獻的某一區(qū)域。

參數(shù)

operation有下列四種情況:

LOCK_SH建立共享鎖定。多個進程可同時對同一個文獻作共享鎖定。

LOCK_EX建立互斥鎖定。一個文獻同時只有一個互斥鎖定。

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

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

LOCK_EX做OR(|)組合。

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

種鎖定。

返回值

返回。表達成功,若有錯誤則返回-1,錯誤代碼存于erm。。

7、Iscek(移動文獻的讀寫位置)

頭文獻

1#include<sys/types.h>

2#include<unistd.h>

定義函數(shù)

1off_tlseek(intfildes,off_toffset,intwhence);

函數(shù)說明

每一個已打開的文獻都有一個讀寫位置,當(dāng)打開文獻時通常其讀寫位置是指向文獻開頭,若是

以附加的方式打開文獻(如O_APPEND),則讀寫位置會指向文獻尾。當(dāng)read?;騱rite。時,讀

寫位置會隨之增長,lseek()便是用來控制該文獻的讀寫位置。參數(shù)fildes為已打開的文獻描述

詞,參數(shù)offset為根據(jù)參數(shù)whence來移動讀寫位置的位移數(shù)。

參數(shù)

whence為下列其中一種:

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

SEEKCUR以目前的讀寫位置往后增長。ffset個位移量。

SEEK_END將讀寫位置指向文獻尾后再熠長offset個位移量。

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

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

1)欲將讀寫位置移到文獻開頭時:lseek(intfildes,O,SEEK_SET);

2)欲將讀寫位置移到文獻尾時:lseek(intfildes,0,SEEK_END);

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

返回值

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

ermo會存放錯誤代碼。

附加說明

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

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

頭文獻

1#include<unistd.h>

2#include<fcntLh>

定義函數(shù)

1intfcntl(intfd,intcmd);

2intfcntl(intfd,intcmd.longarg);

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

函數(shù)說明

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

作的指令。

有以下幾種情況:

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

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

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

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

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

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

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

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

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

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

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

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

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

1structflcok

2{

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

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

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

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

7pid_tl_pid;/*鎖定動作的進程*/

8};

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

F_RDLCK建立一個供讀取用的鎖定

F.WRLCK建立一個供寫入用的鎖定

F_UNLCK刪除之前建立的鎖定

l_whence也有三種方式:

SEEK.SET以文獻開頭為鎖定的起始位置。

SEEK_CUR以目前文獻讀寫位置為鎖定的起始位置

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

返回值

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

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

頭文獻

1include<stdio.h>

定義函數(shù)

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

函數(shù)說明

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

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

返回值

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

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

頭文獻

1#include<stdio.h>

定義函數(shù)

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

函數(shù)說明

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

返回值

若成功則返回寫出的字符個數(shù),返回EOF則表達有錯誤發(fā)生。

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

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

頭文獻

1#include<stdlib.h>

定義函數(shù)

1void*calloc(size_tnmemb,size_tsize);

函數(shù)說明

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

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

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

返回值

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

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

頭文獻

1#include<stdlib.h>

定義函數(shù)

1voidfree(void*ptr);

函數(shù)說明

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

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

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

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

頭文獻

1#include<stdlib.h>

定義函數(shù)

1void*malloc(size_tsize);

函數(shù)說明

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

返回值

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

范例

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

(三)進程操作篇

1、execl(執(zhí)行文獻)

頭文獻

1#include<unistd.h>

定義函數(shù)

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

函數(shù)說明

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

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

返回值

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

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

頭文獻

#include<unisld.h>

定義函數(shù)

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

函數(shù)說明

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

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

(NULL)作結(jié)束。

返回值

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

錯誤代碼

參考exeeve。。

3、exeev(執(zhí)行文獻)

頭文獻

1#include<unistd.h>

定義函數(shù)

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

函數(shù)說明

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

個參數(shù),第二個參數(shù)運用數(shù)組指針來傳遞給執(zhí)行文獻。

返回值

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

錯誤代碼

請參考execve()。

4、execve(執(zhí)行文獻)

頭文獻

1#include<unistd.h>

定義函數(shù)

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

函數(shù)說明

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

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

返回值

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

錯誤代碼

EACCES

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

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

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

EPERM

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

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

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

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

ENOEXEC無法判斷欲執(zhí)行文獻的執(zhí)行文獻格式,有也許是格式錯誤或無法在此平臺執(zhí)行。

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

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

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

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

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

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

ELOOP過多的符號連接

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

EIOI/O存取錯誤

ENFILE已達成系統(tǒng)所允許的打開文獻總數(shù)。

EMFILE已達成系統(tǒng)所允許單一進程所能打開的文獻總數(shù)。

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

EISDIRELF翻譯器為一目錄

ELIBBADELF翻譯器有問題。

5、execvp(執(zhí)行文獻)

頭文獻

1#include<unistd.h>

定義函數(shù)

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

函數(shù)說明

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

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

返回值

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

錯誤代碼

請參考execve()。

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

頭文獻

1#include<sldlib.h>

定義函數(shù)

1voidexit(intstatus);

函數(shù)說明

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

會自動寫回并關(guān)閉未關(guān)閉的文獻。

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

頭文獻

I#include<unistd.h>

定義函數(shù)

1void_exil(intstatus);

函數(shù)說明

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

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

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

附加說明

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

8、vfork(建立一個新的進程)

頭文獻

1#include<unistd.h>

定義函數(shù)

1pid_tvfork(void);

函數(shù)說明

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

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

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

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

不會同步。此外,子進程不會繼承父進程的文獻鎖定和未解決的信號。注意,Linux不保證子

進程會比父進程先執(zhí)行或晚執(zhí)行,因此編寫程序時要留意

死鎖或競爭條件的發(fā)生。

返回侑

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

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

錯誤代碼

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

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

頭文獻

1#include<unistd.h>

定義函數(shù)

1pid_tgetpid(void);

函數(shù)說明

getpid()用來取得目前進程的進程辨認(rèn)碼,許多程序運用取到的此值來建立臨時文獻,以避犯

臨時文獻相同帶來的問題。

返回值

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

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

頭文獻

1#include<unistd.h>

定義函數(shù)

1pid_tgetppid(void);

函數(shù)說明

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

返回值

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

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

頭文獻

1#inclnde<sys/types.h>

2#include<sys/wait.h>

定義函數(shù)

1pid_twait(int*status);

函數(shù)說明

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

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

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

參數(shù)

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

返回值

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

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

頭文獻

1#include<sys/types.h>

2#include<sys/wait.h>

定義函數(shù)

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

函數(shù)說明

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

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

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

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

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

pid=-l等待任何子進程,相稱于wait。。

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

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

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

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

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

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

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

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

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

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

WTERMSIG(slatus)取得子進程因信號而中止的信號代碼,一般會先用WIFSIGNALED來判斷

后才使用此宏。

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

WUNTRACED時才會有此情況。

WSTOPSIG(status)取得引發(fā)子進程暫停的信號代碼,一般會先用WIFSTOPPED來判斷后才使

用此宏。

返回值

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

(四)信號解決篇

1、sigaction(查詢或設(shè)立信號解決方式)

頭文獻

1#include<signal.h>

定義函數(shù)

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

函數(shù)說明

sigaclion。會依參數(shù)signum指定的信號編號來設(shè)立該信號的解決函數(shù)。參數(shù)signum可以指定

SIGKILL和SIGSTOP以外的所有信號。

如參數(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相同,代表新的信號解決函數(shù),其他意義請參考

signal。。

sa_mask用來設(shè)立在解決該信號時暫時將sa_mask指定的信號擱置。

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

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

OR運算(D組合

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

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

設(shè)的方式。

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

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

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

返回值

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

錯誤代碼

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

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

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

2、sigaddset(增長一個信號至信號集)

頭文獻

1#include<signal.h>

定義函數(shù)

1intsigaddset(sigset_t^set,intsignum);

函數(shù)說明

sigaddsel。用來將參數(shù)signum代表的信號加入至參數(shù)set信號集里。

返回值

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

錯誤代碼

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

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

3、sigdelset(從信號集里刪除一個信號)

頭文獻

1#inckide<signal.h>

定義函數(shù)

Iintsigdeisel(sigset_t*set,intsignum);

函數(shù)說明

sigdelset。用來將參數(shù)signum代表的信號從參數(shù)set信號集里刪除。

返回值

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

錯誤代碼

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

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

4、sigcmptysct(初始化信號集)

頭文獻

1#include<signaLh>

定義函數(shù)

1intsigemptyset(sigset_t*set);

函數(shù)說明

sigempiysei()用來將參數(shù)set信號集初始化并清空。

返回值

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

錯誤代碼

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

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

頭文獻

1#include<signal.h>

定義函數(shù)

1intsigfillset(sigset_t*set);

函數(shù)說明

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

返回值

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

附加說明

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

6、sigismember(測試某個信號是否已加入至信號集里)

頭文獻

1#include<signal.h>

定義函數(shù)

1intsigismember(constsigset_t*set,intsignum);

函數(shù)說明

sigismember。用來測試參數(shù)signum代表的信號是否已加入至參數(shù)set信號集里。假如信號集里

已有該信號則返回1,否則返問0。

返回值

信號集已有該信號則返回1,沒有則返回0。假如有錯誤則返回-1。

錯誤代碼

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

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

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

頭文獻

1#include<signal.h>

定義函數(shù)

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

函數(shù)說明

signal。會依參數(shù)signum指定的信號編號來設(shè)立該信號的解決函數(shù)。當(dāng)指定的信號到達時就會跳

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

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

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

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

關(guān)干信號的編號和說明,請參考附錄D

返回值

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

附加說明

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

的解決方式,假如要改變此操作請改用

sigaction()o

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

頭文獻

1#include<unistd.h>

定義函數(shù)

1unsignedintsleep(unsignedintseconds);

函數(shù)說明

sleep。會令目前的進程暫停,直到達成參數(shù)seconds所指定的時間,或是被信號所中斷。

返回值

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

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

頭文獻

1#include<stdio.h>

定義函數(shù)

1voidperror(constchar*s);

函數(shù)說明

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

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

錯誤因素依照全局變量errno的值來決定要輸出的字符串。

返回值

10、mkfifo(建立具名管道)

頭文獻

1#inckide<sys/types.h>

2#include<sys/stat.h>

定義函數(shù)

1intmkfifo(conslchar*pathname,mode_tmode);

函數(shù)說明

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

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

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

取。當(dāng)使用open()來打開FIFO文獻時,

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

1、當(dāng)使用O_NONBLOCK旗標(biāo)時,打開FIFO文獻來讀取的操作會立刻返回,但是若還沒有其

他進程打開FIFO文獻來讀取,則寫入的操作會

返回ENXIO錯誤代碼。

2、沒有使用O_NONBLOCK旗標(biāo)時,打開FIFO來讀取的操作會等到其他進程打開FIFO文獻

來寫入才正常返回。同樣地,打開FIFO文獻來寫

入的操作會等到其他進程打開FIFO文獻來讀取后才正常返回。

返回值

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

錯誤代碼

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

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

ENAMETOOLONG參數(shù)pathname的途徑名稱太長。

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

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

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

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

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

頭文獻

1#includc<stdio.h>

定義函數(shù)

1inipclose(FILE*stream);

函數(shù)說明

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

獻指針。

返回值

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

錯誤代碼

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

12、pipe(建立管道)

頭文獻

1#include<unistd.h>

定義函數(shù)

1intpipe(intfiledes[2]);

函數(shù)說明

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

filedes⑴則為管道的寫入端。

返回值

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

錯誤代碼

EMFILE進程已用完文獻描述詞最大量。

ENFILE系統(tǒng)已無文獻描述詞可用。

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

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

頭文獻

1#include<stdio.h>

定義函數(shù)

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

函數(shù)說明

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

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

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

返回一個文獻指針。隨后送程便可運用此

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

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

了fclose。以外。

返回值

若成功則返回文獻指針,否則返回NULL,錯誤因素存于errno中。

錯誤代碼

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

注意事項

在編寫具SUID/SGID權(quán)限的程序時請盡量避免使用popen(),popen()會繼承環(huán)境變量,通過環(huán)

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

(五)接口解決篇

1、accept(接受socket連線)

頭文獻

1#include<sys/types.h>

2#include<sys/socket.h>

定義函數(shù)

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

函數(shù)說明

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

有連線進來時accept。會返回一個新的

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

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

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

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

考bind()o

返回值

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

錯誤代碼

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

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

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

EOPNOTSUPP指定的socket并非SOCK_STREAMo

EPERM防火墻拒絕此連線。

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

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

2、bind(對socket定位)

頭文獻

1#include<sys/types.h>

2#include<sys/socket.h>

定義函數(shù)

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

函數(shù)說明

bind。用來設(shè)立給參數(shù)sockfd的socket一個名稱。此名稱由參數(shù)my_addr指向一sockaddr

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

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

1structsockaddr

2{

3unsignedshortintsa_family;

4charsa_data[14];

5};

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

sa_daia最多使用14個字符長度。

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

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

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編號

sin_addr.s_addr為IP地址

sin_zero未使用。

參數(shù)

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

返回值

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

錯誤代碼

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

EACCESS權(quán)限局限性

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

3、connect(建立socket連線)

頭文獻

1#include<sys/types.h>

2#include<sys/sockel.h>

定義函數(shù)

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

函數(shù)說明

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

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

構(gòu)長度。

返回值

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

錯誤代碼

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

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

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

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

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

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

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

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

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

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

頭文獻

1#include<netinet/in.h>

定義函數(shù)

1unsignedlonginthtonl(unsignedlonginthostlong);

函數(shù)說明

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

返回值

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

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

頭文獻

1#include<netinet/in.h>

定義函數(shù)

1unsignedshortinthtons(unsigncdshortinthostshort);

函數(shù)說明

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

返回值

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

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

頭文獻

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

2#include<netinet/in.h>

3#include<arpa/inet.h>

定義函數(shù)

1unsignedlongintinct_addr(constchar*cp);

函數(shù)說明

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

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

如:“163.13.132.68”。

返回值

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

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

頭文獻

1#include<sys/scoket.h>

2#include<netinet/in.h>

3#include<arpa/inel.h>

定義函數(shù)

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

函數(shù)說明

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

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

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

structinaddr

unsignedlongints_addr;

};

返回值

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

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

頭文獻

1#includc<sys/sockct.h>

2#includc<netinet/in.h>

3#include<arpa/inet.h>

定義函數(shù)

1char*inel_ntoa(slructin_addrin);

函數(shù)說明

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

符串的指針返回。

返回值

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

9、listen(等待連接)

頭文獻

1#include<sys/socket.h>

定義函數(shù)

1intlisten(ints,intbacklog);

函數(shù)說明

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

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

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

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

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

返回值

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

附加說明

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

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

錯誤代碼

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

EACCESS權(quán)限局限性

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

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

頭文獻

1#include<netinet/in.h>

定義函數(shù)

1unsignedlongintntohl(unsignedlongintnetlong);

函數(shù)說明

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

返回值

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

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

頭文獻

I#include<netinet/in.h>

定義函數(shù)

1unsignedshortintntohs(unsignedshortintnetshort);

函數(shù)說明

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

返回值

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

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

頭文獻

1#include<sys/types.h>

2#include<sys/socket.h>

定義函數(shù)

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

函數(shù)說明

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

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

參數(shù)

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

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

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

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

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

回-1,錯誤因素存于errno中。

錯誤代碼

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

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

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

EINTR被信號所中斷

EAGAIN此動作會令進程阻斷,但參數(shù)s的socket為不可阻斷

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

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

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

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

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

recv,recvmsgtsend,sendto,socket

頭文獻

1#include<sys/types.h>

2#include<sys/socket.h>

定義函數(shù)

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

*fromlen);

函數(shù)說明

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

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

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

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

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

返回值

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

錯誤代碼

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

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

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

EINTR被信號所中斷。

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

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

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

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

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

頭文獻

1#include<sys/types.h>

2#include<sys/socktet.h>

定義函數(shù)

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

函數(shù)說明

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

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

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

msghdr的定義請參考sendmsgO。

返回值

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

錯誤代碼

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

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

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

EINTR被信號所中斷。

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

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

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

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

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

頭文獻

I#include<sys/types.h>

2#include<sys/socket.h>

定義函數(shù)

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

函數(shù)說明

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

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

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

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

MSG_DONTROUTE取消路由表查詢

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

MSG_NOSIGNAL此動作不愿被SIGPIPE信號中斷,

返回侑

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

錯誤代碼

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

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

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

EINTR被信號所中斷。

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

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

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

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

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

頭文獻

1#include<sys/types.h>

2#include<sys/socket.h>

定義函數(shù)

Iintsendmsg(ints,conststrcutmsghdr*msg,unsignedintflags);

函數(shù)說明

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

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

指向欲連線的數(shù)據(jù)結(jié)構(gòu)內(nèi)容,參數(shù)flags一般默認(rèn)為0,具體描述請參考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ù),失敗返問-1,錯誤因素存于erm。

錯誤代碼

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

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

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

EINTR被信號所中斷。

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

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

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

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

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

頭文獻

1#include<sys/types.h>

2#include<sys/socket.h>

定義函數(shù)

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

*to,intlolen);

函數(shù)說明

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

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

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

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

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

返回值

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

錯誤代碼

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

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

WNOTSOCKcanshus為一文獻描述詞,非socket。

EINTR被信號所中斷。

EAGAIN此動作會令進程阻斷,但參數(shù)s的sokct為補課阻斷的。

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

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

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

頭文獻

1#include<sys/types.h>

2#include<sys/socket.h>

定義函數(shù)

1intsockct(intdomain,inttype,intprotocol);

函數(shù)說明

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

指定使用何種的地址類型,完整的定義

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

PF_UNIX/PF_LOCAL/AF_UNIX/AF_LOCALUNIX進程通信協(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核心用戶接口裝置

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

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

PF_ATMPVC/AF_ATMPVC存取原始ATMPVCs

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

PF_PACKET/AF_PACKET初級封包接口

參數(shù)

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

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

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

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

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

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

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

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

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

返回值

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

錯誤代碼

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

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

EMFILE進程文獻表溢出,無法再建立新的socket

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

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

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

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

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

頭文幀

1#include<stdlib.h>

定義函數(shù)

1char*getenv(constchar*name);

函數(shù)說明

geie

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論