




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第2課時 除法的初步認(rèn)識(教學(xué)設(shè)計)-2024-2025學(xué)年二年級下冊數(shù)學(xué)人教版
- 安徽省合肥市長豐縣七年級生物下冊 4.1.3《青春期》教學(xué)實錄1 (新版)新人教版
- 內(nèi)鏡中心職業(yè)防護管理
- 浙教版七年級科學(xué)下冊教學(xué)設(shè)計:4.7探索宇宙
- 黨務(wù)知識培訓(xùn)課件模板
- 黨務(wù)知識培訓(xùn)課件下載
- 黨務(wù)業(yè)務(wù)知識培訓(xùn)課件
- 傳統(tǒng)現(xiàn)澆建筑概述
- 2024年九年級數(shù)學(xué)下冊 第30章 二次函數(shù)30.3由不共線三點的坐標(biāo)確定二次函數(shù)教學(xué)實錄(新版)冀教版
- 2023七年級英語上冊 Module 3 My school Unit 3 Language in use教學(xué)實錄 (新版)外研版
- 梅尼埃病的護理查房
- 精釀啤酒廠合作協(xié)議書范文
- 勞務(wù)分包的工程施工組織設(shè)計方案
- 一般生產(chǎn)經(jīng)營單位安全培訓(xùn)試題含完整答案(各地真題)
- 開大2018-社區(qū)管理-網(wǎng)上作業(yè)答案
- 北京公交集團招聘筆試題庫2024
- 2024反詐知識競賽考試題庫及答案(三份)
- 新版SEW MOVIDRIVE MDX61B調(diào)試步驟(variable setpoint)VER.4.4
- 20061228 福建省“十一五”數(shù)字福建專項規(guī)劃(2006-2010)
- (正式版)FZ∕T 64111-2024 衛(wèi)生巾(護墊)用非織造布
- 電機與拖動智慧樹知到期末考試答案章節(jié)答案2024年遼寧工程技術(shù)大學(xué)
評論
0/150
提交評論