本章將描述所有在socket編程中使用的輔助函數(shù)。其他輔助功能請(qǐng)參見(jiàn)“端口與服務(wù)”和“網(wǎng)絡(luò)字節(jié)順序”章節(jié)。
The?write?Function
write函數(shù)嘗試將nbyte字節(jié)從buf所指向的緩沖區(qū)寫(xiě)入與打開(kāi)的文件描述符fildes相關(guān)聯(lián)的文件。
也可以使用send()函數(shù)將數(shù)據(jù)發(fā)送到另一個(gè)進(jìn)程。
#include <unistd.h>
int write(int fildes, const void *buf, int nbyte);
成功完成后,write()返回與fildes相關(guān)聯(lián)的文件實(shí)際寫(xiě)入的字節(jié)數(shù)。這個(gè)數(shù)字不會(huì)大于nbyte。否則返回-1。
Parameters
? ??fildes??它是套接字函數(shù)返回的套接字描述符。
? ??buf?? 它是一個(gè)指針,指向您想要發(fā)送的數(shù)據(jù)。
? ??nbyte?? 它是要寫(xiě)入的字節(jié)數(shù)。如果nbyte為0,write()將返回0,如果文件是普通文件則沒(méi)有其他結(jié)果;否則,結(jié)果是不指定的。
The?read?Function
read函數(shù)嘗試從與緩沖區(qū)fildes相關(guān)的文件中讀取nbyte字節(jié)到buf所指向的緩沖區(qū)中。
你也可以使用recv()函數(shù)來(lái)讀取數(shù)據(jù)到另一個(gè)進(jìn)程。
#include <unistd.h>
int read(int fildes, const void *buf, int nbyte);
成功完成后,write()返回與fildes相關(guān)聯(lián)的文件實(shí)際寫(xiě)入的字節(jié)數(shù)。這個(gè)數(shù)字不會(huì)大于nbyte。否則返回-1。
Parameters
? ??fildes???它是套接字函數(shù)返回的套接字描述符。
? ??buf?? 它是讀取信息的緩沖區(qū)。
? ??nbyte???它是要讀取的字節(jié)數(shù)。
The?fork?Function
fork函數(shù)創(chuàng)建一個(gè)新進(jìn)程。調(diào)用子進(jìn)程的新進(jìn)程將是調(diào)用進(jìn)程(父進(jìn)程)的精確副本。子進(jìn)程繼承父進(jìn)程的許多屬性。
#include <sys/types.h>
#include <unistd.h>
int fork(void);
成功完成后,fork()向子進(jìn)程返回0,向父進(jìn)程返回子進(jìn)程的進(jìn)程ID。否則,父進(jìn)程返回-1,不創(chuàng)建子進(jìn)程,并設(shè)置errno來(lái)指示錯(cuò)誤。
Parameters
? ??void?? 這意味著不需要參數(shù)。
The?bzero?Function
bzero函數(shù)的作用是:在字符串s中放置nbyte的空字節(jié)。該函數(shù)用于設(shè)置所有的套接字結(jié)構(gòu)為空值。
void bzero(void *s, int nbyte);
這個(gè)函數(shù)不返回任何東西。
Parameters
? ??s?? 它指定了必須用空字節(jié)填充的字符串。這將是一個(gè)指向socket結(jié)構(gòu)變量。
? ??nbyte?? 它指定要用空值填充的字節(jié)數(shù)。這將是套接字結(jié)構(gòu)的大小。
The?bcmp?Function
bcmp函數(shù)將字節(jié)串s1與字節(jié)串s2進(jìn)行比較。兩個(gè)字符串都假定為nbyte字節(jié)長(zhǎng)。
int bcmp(const void *s1, const void *s2, int nbyte);
如果兩個(gè)字符串相同,則返回0,否則返回1。當(dāng)nbyte為0時(shí),bcmp()函數(shù)總是返回0。
Parameters
? ??s1?? 它指定要比較的第一個(gè)字符串。
? ??s2?? 它指定要比較的第二個(gè)字符串。
? ??nbyte?? 它指定要比較的字節(jié)數(shù)。
The?bcopy?Function
bcopy函數(shù)的作用是:將字符串s1中的nbyte字節(jié)復(fù)制到字符串s2中。重疊字符串被正確處理。
void bcopy(const void *s1, void *s2, int nbyte);
這個(gè)函數(shù)不返回任何東西。
Parameters
? ??s1?? 它指定源字符串。
? ??s2v?? 它指定目標(biāo)字符串。
? ??nbyte?? 它指定要復(fù)制的字節(jié)數(shù)。
The?memset?Function
memset函數(shù)也用于設(shè)置結(jié)構(gòu)變量,方法與bzero相同。下面給出了它的語(yǔ)法。
void *memset(void *s, int c, int nbyte);
這個(gè)函數(shù)返回一個(gè)指向void的指針;事實(shí)上,一個(gè)指向集合內(nèi)存的指針,您需要相應(yīng)地對(duì)它進(jìn)行分類。
Parameters
? ??s?? 它指定要設(shè)置的源。
? ??c?? 它指定要在nbyte位置上設(shè)置的字符。
? ??nbyte?? 它指定要設(shè)置的字節(jié)數(shù)。