UNIX常用系統(tǒng)函數(shù)_第1頁
UNIX常用系統(tǒng)函數(shù)_第2頁
UNIX常用系統(tǒng)函數(shù)_第3頁
UNIX常用系統(tǒng)函數(shù)_第4頁
UNIX常用系統(tǒng)函數(shù)_第5頁
已閱讀5頁,還剩56頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 UNIX常用系統(tǒng)函數(shù)-getopt(分析命令行參數(shù)) 相關函數(shù) 表頭文件 #include定義函數(shù) int getopt(int argc,char * const argv ,const char * optstring);函數(shù)說明 getopt()用來分析命令行參數(shù)。參數(shù)argc和argv是由main()傳遞的參數(shù)個數(shù)和內容。參數(shù)optstring 則代表欲處理的選項字符串。此函數(shù)會返回在argv 中下一個的選項字母,此字母會對應參數(shù)optstring 中的字母。如果選項字符串里的字母后接著冒號:,則表示還有相關的參數(shù),全域變量optarg 即會指向此額外參數(shù)。如果getopt()找不到

2、符合的參數(shù)則會印出錯信息,并將全域變量optopt設為字符,如果不希望getopt()印出錯信息,則只要將全域變量opterr設為0即可。 返回值 如果找到符合的參數(shù)則返回此參數(shù)字母,如果參數(shù)不包含在參數(shù)optstring 的選項字母則返回字符,分析結束則返回-1。范例 #include#includeint main(int argc,char *argv)int ch;opterr = 0;while(ch = getopt(argc,argv,a:bcde)!= -1) switch(ch)case a:printf(option a:%sn,optarg);break;case b:p

3、rintf(option b :bn);break;default:printf(other option :%cn,ch);printf(optopt +%cn,optopt); 執(zhí)行 $./getopt boption b:b$./getopt cother option:c$./getopt aother option :$./getopt a12345option a:12345 isatty(判斷文件描述詞是否是為終端機) 相關函數(shù) ttyname表頭文件 #include定義函數(shù) int isatty(int desc);函數(shù)說明 如果參數(shù)desc所代表的文件描述詞為一終端機則返回

4、1,否則返回0。返回值 如果文件為終端機則返回1,否則返回0。 范例 參考ttyname()。 select(I/O多工機制) 表頭文件 #include#include#include定義函數(shù) int select(int n,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout); 函數(shù)說明 select()用來等待文件描述詞狀態(tài)的改變。參數(shù)n代表最大的文件描述詞加1,參數(shù)readfds、writefds 和exceptfds 稱為描述詞組,是用來回傳該描述詞的讀,寫或例外的狀況。底下的

5、宏提供了處理這三種描述詞組的方式:FD_CLR(inr fd,fd_set* set);用來清除描述詞組set中相關fd 的位FD_ISSET(int fd,fd_set *set);用來測試描述詞組set中相關fd 的位是否為真 FD_SET(int fd,fd_set*set);用來設置描述詞組set中相關fd的位FD_ZERO(fd_set *set); 用來清除描述詞組set的全部位參數(shù) timeout為結構timeval,用來設置select()的等待時間,其結構定義如下struct timevaltime_t tv_sec;time_t tv_usec;返回值 如果參數(shù)timeou

6、t設為NULL則表示select()沒有timeout。 錯誤代碼 執(zhí)行成功則返回文件描述詞狀態(tài)已改變的個數(shù),如果返回0代表在描述詞狀態(tài)改變前已超過timeout時間,當有錯誤發(fā)生時則返回-1,錯誤原因存于errno,此時參數(shù)readfds,writefds,exceptfds和timeout的值變成不可預測。EBADF 文件描述詞為無效的或該文件已關閉EINTR 此調用被信號所中斷EINVAL 參數(shù)n 為負值。ENOMEM 核心內存不足范例 常見的程序片段:fs_set readset;FD_ZERO(&readset);FD_SET(fd,&readset);select(fd+1,&re

7、adset,NULL,NULL,NULL);if(FD_ISSET(fd,readset) ttyname(返回一終端機名稱) 相關函數(shù) Isatty表頭文件 #include定義函數(shù) char * ttyname(int desc);函數(shù)說明 如果參數(shù)desc所代表的文件描述詞為一終端機,則會將此終端機名稱由一字符串指針返回,否則返回NULL。返回值 如果成功則返回指向終端機名稱的字符串指針,有錯誤情況發(fā)生時則返回NULL。 范例 #include#include#include #includemain()int fd;char * file = /dev/tty;fd = open (f

8、iel,O_RDONLY); printf(%s,file); if(isatty(fd)printf(is a tty.n);printf(ttyname = %s n,ttyname(fd);else printf( is not a ttyn);close(fd);執(zhí)行 /dev/tty is a tty ttyname = /dev/tty 添加評論 | 閱讀評論 (1) 3:45 | 固定鏈接 | 引用通告 (0) | 記錄它 固定鏈接 關閉 getenv(取得環(huán)境變量內容) 相關函數(shù) putenv,setenv,unsetenv表頭文件 #include定義函數(shù) char * ge

9、tenv(const char *name);函數(shù)說明 getenv()用來取得參數(shù)name環(huán)境變量的內容。參數(shù)name為環(huán)境變量的名稱,如果該變量存在則會返回指向該內容的指針。環(huán)境變量的格式為namevalue。 返回值 執(zhí)行成功則返回指向該內容的指針,找不到符合的環(huán)境變量名稱則返回NULL。范例 #includemian()char *p;if(p = getenv(USER)printf(USER=%sn,p);執(zhí)行 USER = root putenv(改變或增加環(huán)境變量) 相關函數(shù) getenv,setenv,unsetenv表頭文件 #include4定義函數(shù) int putenv

10、(const char * string);函數(shù)說明 putenv()用來改變或增加環(huán)境變量的內容。參數(shù)string的格式為namevalue,如果該環(huán)境變量原先存在,則變量內容會依參數(shù)string改變,否則此參數(shù)內容會成為新的環(huán)境變量。 返回值 執(zhí)行成功則返回0,有錯誤發(fā)生則返回-1。錯誤代碼 ENOMEM 內存不足,無法配置新的環(huán)境變量空間。范例 #includemain()char *p;if(p = getenv(USER)printf(USER =%sn,p);putenv(USER=test); printf(USER+5sn,getenv(USER);執(zhí)行 USER=rootUS

11、ER=root setenv(改變或增加環(huán)境變量) 相關函數(shù) getenv,putenv,unsetenv表頭文件 #include定義函數(shù) int setenv(const char *name,const char * value,int overwrite);函數(shù)說明 setenv()用來改變或增加環(huán)境變量的內容。參數(shù)name為環(huán)境變量名稱字符串。 參數(shù) value則為變量內容,參數(shù)overwrite用來決定是否要改變已存在的環(huán)境變量。如果overwrite不為0,而該環(huán)境變量原已有內容,則原內容會被改為參數(shù)value所指的變量內容。如果overwrite為0,且該環(huán)境變量已有內容,則參

12、數(shù)value會被忽略。返回值 執(zhí)行成功則返回0,有錯誤發(fā)生時返回-1。錯誤代碼 ENOMEM 內存不足,無法配置新的環(huán)境變量空間范例 #includemain()char * p;if(p=getenv(USER)printf(USER =%sn,p);setenv(USER,test,1);printf(USER=%sn,getenv(USEr); unsetenv(USER);printf(USER=%sn,getenv(USER); 執(zhí)行 USER = rootUSER = testUSER = (null) 添加評論 3:44 | 固定鏈接 | 引用通告 (0) | 記錄它 固定鏈接

13、關閉 accept(接受socket連線) 相關函數(shù) socket,bind,listen,connect表頭文件 #include#include定義函數(shù) int accept(int s,struct sockaddr * addr,int * addrlen);函數(shù)說明 accept()用來接受參數(shù)s的socket連線。參數(shù)s的socket必需先經bind()、listen()函數(shù)處理過,當有連線進來時accept()會返回一個新的socket處理代碼,往后的數(shù)據傳送與讀取就是經由新的socket處理,而原來參數(shù)s的socket能繼續(xù)使用accept()來接受新的連線要求。連線成功時,參

14、數(shù)addr所指的結構會被系統(tǒng)填入遠程主機的地址數(shù)據,參數(shù)addrlen為scokaddr的結構長度。關于結構sockaddr的定義請參考bind()。 返回值 成功則返回新的socket處理代碼,失敗返回-1,錯誤原因存于errno中。錯誤代碼 EBADF 參數(shù)s 非合法socket處理代碼。EFAULT 參數(shù)addr指針指向無法存取的內存空間。ENOTSOCK 參數(shù)s為一文件描述詞,非socket。EOPNOTSUPP 指定的socket并非SOCK_STREAM。EPERM 防火墻拒絕此連線。ENOBUFS 系統(tǒng)的緩沖內存不足。 ENOMEM 核心內存不足。范例 參考listen()。 b

15、ind(對socket定位) 相關函數(shù) socket,accept,connect,listen表頭文件 #include#include定義函數(shù) int bind(int sockfd,struct sockaddr * my_addr,int addrlen); 函數(shù)說明 bind()用來設置給參數(shù)sockfd的socket一個名稱。此名稱由參數(shù)my_addr指向一sockaddr結構,對于不同的socket domain定義了一個通用的數(shù)據結構struct sockaddrunsigned short int sa_family;char sa_data14;sa_family 為調用s

16、ocket()時的domain參數(shù),即AF_xxxx值。 sa_data 最多使用14個字符長度。此sockaddr結構會因使用不同的socket domain而有不同結構定義,例如使用AF_INET domain,其socketaddr結構定義便為struct socketaddr_inunsigned short int sin_family;uint16_t sin_port;struct in_addr sin_addr;unsigned char sin_zero8;struct in_addruint32_t s_addr;sin_family 即為sa_familysin_por

17、t 為使用的port編號sin_addr.s_addr 為IP 地址sin_zero 未使用。參數(shù) addrlen為sockaddr的結構長度。返回值 成功則返回0,失敗返回-1,錯誤原因存于errno中。 錯誤代碼 EBADF 參數(shù)sockfd 非合法socket處理代碼。EACCESS 權限不足ENOTSOCK 參數(shù)sockfd為一文件描述詞,非socket。范例 參考listen() connect(建立socket連線) 相關函數(shù) socket,bind,listen表頭文件 #include#include定義函數(shù) int connect (int sockfd,struct soc

18、kaddr * serv_addr,int addrlen); 函數(shù)說明 connect()用來將參數(shù)sockfd 的socket 連至參數(shù)serv_addr 指定的網絡地址。結構sockaddr請參考bind()。參數(shù)addrlen為sockaddr的結構長度。返回值 成功則返回0,失敗返回-1,錯誤原因存于errno中。錯誤代碼 EBADF 參數(shù)sockfd 非合法socket處理代碼EFAULT 參數(shù)serv_addr指針指向無法存取的內存空間 ENOTSOCK 參數(shù)sockfd為一文件描述詞,非socket。EISCONN 參數(shù)sockfd的socket已是連線狀態(tài)ECONNREFUS

19、ED 連線要求被server端拒絕。ETIMEDOUT 企圖連線的操作超過限定時間仍未有響應。ENETUNREACH 無法傳送數(shù)據包至指定的主機。EAFNOSUPPORT sockaddr結構的sa_family不正確。EALREADY socket為不可阻斷且先前的連線操作還未完成。 執(zhí)行 $ ./connectWelcome to server!hi I am client! /*鍵盤輸入*/*中斷程序*/ endprotoent(結束網絡協(xié)議數(shù)據的讀?。?相關函數(shù) getprotoent,getprotobyname,getprotobynumber,setprotoent表頭文件 #i

20、nclude定義函數(shù) void endprotoent(void);函數(shù)說明 endprotoent()用來關閉由getprotoent()打開的文件。 返回值 范例 參考getprotoent() endservent(結束網絡服務數(shù)據的讀取) 相關函數(shù) getservent,getservbyname,getservbyport,setservent表頭文件 #include定義函數(shù) void endservent(void);函數(shù)說明 endservent()用來關閉由getservent()所打開的文件。 返回值 范例 參考getservent()。 getsockopt(取得sock

21、et狀態(tài)) 相關函數(shù) setsockopt表頭文件 #include#include定義函數(shù) int getsockopt(int s,int level,int optname,void* optval,socklen_t* optlen); 函數(shù)說明 getsockopt()會將參數(shù)s所指定的socket狀態(tài)返回。參數(shù)optname代表欲取得何種選項狀態(tài),而參數(shù)optval則指向欲保存結果的內存地址,參數(shù)optlen則為該空間的大小。參數(shù)level、optname請參考setsockopt()。返回值 成功則返回0,若有錯誤則返回-1,錯誤原因存于errno錯誤代碼 EBADF 參數(shù)s 并

22、非合法的socket處理代碼 ENOTSOCK 參數(shù)s為一文件描述詞,非socketENOPROTOOPT 參數(shù)optname指定的選項不正確EFAULT 參數(shù)optval指針指向無法存取的內存空間范例 #include#includemain()int s,optval,optlen = sizeof(int); if(s = socket(AF_INET,SOCK_STREAM,0)0) perror(socket);getsockopt(s,SOL_SOCKET,SO_TYPE,&optval,&optlen);printf(optval = %dn,optval);close(s);執(zhí)

23、行 optval = 1 /*SOCK_STREAM的定義正是此值*/ htonl(將32位主機字符順序轉換成網絡字符順序) 相關函數(shù) htons,ntohl,ntohs表頭文件 #include定義函數(shù) unsigned long int htonl(unsigned long int hostlong);函數(shù)說明 htonl()用來將參數(shù)指定的32位hostlong 轉換成網絡字符順序。 返回值 返回對應的網絡字符順序。范例 參考getservbyport()或connect()。 htons(將16位主機字符順序轉換成網絡字符順序) 相關函數(shù) htonl,ntohl,ntohs表頭文件

24、#include定義函數(shù) unsigned short int htons(unsigned short int hostshort);函數(shù)說明 htons()用來將參數(shù)指定的16位hostshort轉換成網絡字符順序。 返回值 返回對應的網絡字符順序。范例 參考connect()。 inet_addr(將網絡地址轉成二進制的數(shù)字) 相關函數(shù) inet_aton,inet_ntoa表頭文件 #include#include#include定義函數(shù) unsigned long int inet_addr(const char *cp); 返回值 成功則返回對應的網絡二進制的數(shù)字,失敗返回-1。

25、inet_aton(將網絡地址轉成網絡二進制的數(shù)字) 相關函數(shù) inet_addr,inet_ntoa表頭文件 #include#include#include定義函數(shù) int inet_aton(const char * cp,struct in_addr *inp); 函數(shù)說明 inet_aton()用來將參數(shù)cp所指的網絡地址字符串轉換成網絡使用的二進制的數(shù)字,然后存于參數(shù)inp所指的in_addr結構中。結構in_addr定義如下struct in_addrunsigned long int s_addr;返回值 成功則返回非0值,失敗則返回0。 inet_ntoa(將網絡二進制的數(shù)字

26、轉換成網絡地址) 相關函數(shù) inet_addr,inet_aton表頭文件 #include#include#include定義函數(shù) char * inet_ntoa(struct in_addr in); 函數(shù)說明 inet_ntoa()用來將參數(shù)in所指的網絡二進制的數(shù)字轉換成網絡地址,然后將指向此網絡地址字符串的指針返回。返回值 成功則返回字符串指針,失敗則返回NULL。 listen(等待連接) 相關函數(shù) socket,bind,accept,connect表頭文件 #include定義函數(shù) int listen(int s,int backlog);函數(shù)說明 listen()用來等待

27、參數(shù)s 的socket連線。參數(shù)backlog指定同時能處理的最大連接要求,如果連接數(shù)目達此上限則client端將收到ECONNREFUSED的錯誤。Listen()并未開始接收連線,只是設置socket為listen模式,真正接收client端連線的是accept()。通常listen()會在socket(),bind()之后調用,接著才調用accept()。 返回值 成功則返回0,失敗返回-1,錯誤原因存于errno附加說明 listen()只適用SOCK_STREAM或SOCK_SEQPACKET的socket類型。如果socket為AF_INET則參數(shù)backlog 最大值可設至128

28、。錯誤代碼 EBADF 參數(shù)sockfd非合法socket處理代碼EACCESS 權限不足EOPNOTSUPP 指定的socket并未支援listen模式。 ntohl(將32位網絡字符順序轉換成主機字符順序) 相關函數(shù) htonl,htons,ntohs表頭文件 #include定義函數(shù) unsigned long int ntohl(unsigned long int netlong);函數(shù)說明 ntohl()用來將參數(shù)指定的32位netlong轉換成主機字符順序。 返回值 返回對應的主機字符順序。范例 參考getservent()。 ntohs(將16位網絡字符順序轉換成主機字符順序)

29、相關函數(shù) htonl,htons,ntohl表頭文件 #include定義函數(shù) unsigned short int ntohs(unsigned short int netshort);函數(shù)說明 ntohs()用來將參數(shù)指定的16位netshort轉換成主機字符順序。 返回值 返回對應的主機順序。范例 參考getservent()。 recv(經socket接收數(shù)據) 相關函數(shù) recvfrom,recvmsg,send,sendto,socket表頭文件 #include#include定義函數(shù) int recv(int s,void *buf,int len,unsigned int f

30、lags); 函數(shù)說明 recv()用來接收遠端主機經指定的socket傳來的數(shù)據,并把數(shù)據存到由參數(shù)buf 指向的內存空間,參數(shù)len為可接收數(shù)據的最大長度。參數(shù) flags一般設0。其他數(shù)值定義如下:MSG_OOB 接收以out-of-band 送出的數(shù)據。MSG_PEEK 返回來的數(shù)據并不會在系統(tǒng)內刪除,如果再調用recv()會返回相同的數(shù)據內容。MSG_WAITALL強迫接收到len大小的數(shù)據后才能返回,除非有錯誤或信號產生。 MSG_NOSIGNAL此操作不愿被SIGPIPE信號中斷返回值成功則返回接收到的字符數(shù),失敗返回-1,錯誤原因存于errno中。錯誤代碼 EBADF 參數(shù)s非

31、合法的socket處理代碼EFAULT 參數(shù)中有一指針指向無法存取的內存空間ENOTSOCK 參數(shù)s為一文件描述詞,非socket。EINTR 被信號所中斷EAGAIN 此動作會令進程阻斷,但參數(shù)s的socket為不可阻斷 ENOBUFS 系統(tǒng)的緩沖內存不足。ENOMEM 核心內存不足EINVAL 傳給系統(tǒng)調用的參數(shù)不正確。范例 參考listen()。 recvfrom(經socket接收數(shù)據) 相關函數(shù) recv,recvmsg,send,sendto,socket表頭文件 #include#include定義函數(shù) int recvfrom(int s,void *buf,int len,u

32、nsigned int flags ,struct sockaddr *from ,int *fromlen); 函數(shù)說明 recv()用來接收遠程主機經指定的socket 傳來的數(shù)據,并把數(shù)據存到由參數(shù)buf 指向的內存空間,參數(shù)len 為可接收數(shù)據的最大長度。參數(shù)flags 一般設0,其他數(shù)值定義請參考recv()。參數(shù)from用來指定欲傳送的網絡地址,結構sockaddr 請參考bind()。參數(shù)fromlen為sockaddr的結構長度。返回值 成功則返回接收到的字符數(shù),失敗則返回-1,錯誤原因存于errno中。 錯誤代碼 EBADF 參數(shù)s非合法的socket處理代碼EFAULT 參

33、數(shù)中有一指針指向無法存取的內存空間。ENOTSOCK 參數(shù)s為一文件描述詞,非socket。EINTR 被信號所中斷。EAGAIN 此動作會令進程阻斷,但參數(shù)s的socket為不可阻斷。ENOBUFS 系統(tǒng)的緩沖內存不足ENOMEM 核心內存不足EINVAL 傳給系統(tǒng)調用的參數(shù)不正確。執(zhí)行 (先執(zhí)行udp server 再執(zhí)行udp client)hello /*從鍵盤輸入字符串*/receive: hello /*server端返回來的字符串*/ recvmsg(經socket接收數(shù)據) 相關函數(shù) recv,recvfrom,send,sendto,sendmsg,socket表頭文件 #i

34、nclude#include定義函數(shù) int recvmsg(int s,struct msghdr *msg,unsigned int flags); 函數(shù)說明 recvmsg()用來接收遠程主機經指定的socket傳來的數(shù)據。參數(shù)s為已建立好連線的socket,如果利用UDP協(xié)議則不需經過連線操作。參數(shù)msg指向欲連線的數(shù)據結構內容,參數(shù)flags一般設0,詳細描述請參考send()。關于結構msghdr的定義請參考sendmsg()。返回值 成功則返回接收到的字符數(shù),失敗則返回-1,錯誤原因存于errno中。錯誤代碼 EBADF 參數(shù)s非合法的socket處理代碼。 EFAULT 參數(shù)中

35、有一指針指向無法存取的內存空間ENOTSOCK 參數(shù)s為一文件描述詞,非socket。EINTR 被信號所中斷。EAGAIN 此操作會令進程阻斷,但參數(shù)s的socket為不可阻斷。ENOBUFS 系統(tǒng)的緩沖內存不足ENOMEM 核心內存不足EINVAL 傳給系統(tǒng)調用的參數(shù)不正確。范例 參考recvfrom()。 send(經socket傳送數(shù)據) 相關函數(shù) sendto,sendmsg,recv,recvfrom,socket表頭文件 #include#include定義函數(shù) int send(int s,const void * msg,int len,unsigned int falgs)

36、; 函數(shù)說明 send()用來將數(shù)據由指定的socket 傳給對方主機。參數(shù)s為已建立好連接的socket。參數(shù)msg指向欲連線的數(shù)據內容,參數(shù)len則為數(shù)據長度。參數(shù)flags一般設0,其他數(shù)值定義如下MSG_OOB 傳送的數(shù)據以out-of-band 送出。MSG_DONTROUTE 取消路由表查詢MSG_DONTWAIT 設置為不可阻斷運作MSG_NOSIGNAL 此動作不愿被SIGPIPE 信號中斷。 返回值 成功則返回實際傳送出去的字符數(shù),失敗返回-1。錯誤原因存于errno錯誤代碼 EBADF 參數(shù)s 非合法的socket處理代碼。EFAULT 參數(shù)中有一指針指向無法存取的內存空間

37、ENOTSOCK 參數(shù)s為一文件描述詞,非socket。EINTR 被信號所中斷。EAGAIN 此操作會令進程阻斷,但參數(shù)s的socket為不可阻斷。ENOBUFS 系統(tǒng)的緩沖內存不足 ENOMEM 核心內存不足EINVAL 傳給系統(tǒng)調用的參數(shù)不正確。范例 參考connect() sendmsg(經socket傳送數(shù)據) 相關函數(shù) send,sendto,recv,recvfrom,recvmsg,socket表頭文件 #include#include定義函數(shù) int sendmsg(int s,const strcut msghdr *msg,unsigned int flags); 函數(shù)說

38、明 sendmsg()用來將數(shù)據由指定的socket傳給對方主機。參數(shù)s為已建立好連線的socket,如果利用UDP協(xié)議則不需經過連線操作。參數(shù)msg 指向欲連線的數(shù)據結構內容,參數(shù)flags一般默認為0,詳細描述請參考send()。結構msghdr定義如下struct msghdrvoid *msg_name; /*Address to send to /receive from . */ socklen_t msg_namelen; /* Length of addres data */strcut iovec * msg_iov; /* Vector of data to send/re

39、ceive into */size_t msg_iovlen; /* Number of elements in the vector */void * msg_control; /* Ancillary dat */ size_t msg_controllen; /* Ancillary data buffer length */int msg_flags; /* Flags on received message */;返回值 成功則返回實際傳送出去的字符數(shù),失敗返回-1,錯誤原因存于errno錯誤代碼 EBADF 參數(shù)s 非合法的socket處理代碼。EFAULT 參數(shù)中有一指針指向無法

40、存取的內存空間 ENOTSOCK 參數(shù)s為一文件描述詞,非socket。EINTR 被信號所中斷。EAGAIN 此操作會令進程阻斷,但參數(shù)s的socket為不可阻斷。ENOBUFS 系統(tǒng)的緩沖內存不足ENOMEM 核心內存不足EINVAL 傳給系統(tǒng)調用的參數(shù)不正確。范例 參考sendto()。 sendto(經socket傳送數(shù)據) 相關函數(shù) send , sendmsg,recv , recvfrom , socket表頭文件 #include #include 定義函數(shù) int sendto ( int s , const void * msg, int len, unsigned int

41、 flags, const struct sockaddr * to , int tolen ) ;函數(shù)說明 sendto() 用來將數(shù)據由指定的socket傳給對方主機。參數(shù)s為已建好連線的socket,如果利用UDP協(xié)議則不需經過連線操作。參數(shù)msg指向欲連線的數(shù)據內容,參數(shù)flags 一般設0,詳細描述請參考send()。參數(shù)to用來指定欲傳送的網絡地址,結構sockaddr請參考bind()。參數(shù)tolen為sockaddr的結果長度。 返回值 成功則返回實際傳送出去的字符數(shù),失敗返回1,錯誤原因存于errno 中。錯誤代碼 EBADF 參數(shù)s非法的socket處理代碼。EFAULT

42、參數(shù)中有一指針指向無法存取的內存空間。WNOTSOCK canshu s為一文件描述詞,非socket。EINTR 被信號所中斷。EAGAIN 此動作會令進程阻斷,但參數(shù)s的soket為補課阻斷的。ENOBUFS 系統(tǒng)的緩沖內存不足。 EINVAL 傳給系統(tǒng)調用的參數(shù)不正確。執(zhí)行 請參考recvfrom() setprotoent(打開網絡協(xié)議的數(shù)據文件) 相關函數(shù) getprotobyname, getprotobynumber, endprotoent表頭文件 #include 定義函數(shù) void setprotoent (int stayopen);函數(shù)說明 setprotoent()用

43、來打開/etc/protocols, 如果參數(shù)stayopen值為1,則接下來的getprotobyname()或getprotobynumber()將不會自動關閉此文件。 setservent(打開主機網絡服務的數(shù)據文件) 相關函數(shù) getservent, getservbyname, getservbyport, endservent表頭文件 #include 定義函數(shù) void setservent (int stayopen);函數(shù)說明 setservent()用來打開/etc/services,如果參數(shù)stayopen值為1,則接下來的getservbyname()或getservb

44、yport()將補回自動關閉文件。 setsockopt(設置socket狀態(tài)) 相關函數(shù) getsockopt表頭文件 #include#include定義函數(shù) int setsockopt(int s,int level,int optname,const void * optval,socklen_toptlen); 函數(shù)說明 setsockopt()用來設置參數(shù)s所指定的socket狀態(tài)。參數(shù)level代表欲設置的網絡層,一般設成SOL_SOCKET以存取socket層。參數(shù)optname代表欲設置的選項,有下列幾種數(shù)值:SO_DEBUG 打開或關閉排錯模式SO_REUSEADDR 允

45、許在bind()過程中本地地址可重復使用SO_TYPE 返回socket形態(tài)。SO_ERROR 返回socket已發(fā)生的錯誤原因 SO_DONTROUTE 送出的數(shù)據包不要利用路由設備來傳輸。SO_BROADCAST 使用廣播方式傳送SO_SNDBUF 設置送出的暫存區(qū)大小SO_RCVBUF 設置接收的暫存區(qū)大小SO_KEEPALIVE 定期確定連線是否已終止。SO_OOBINLINE 當接收到OOB 數(shù)據時會馬上送至標準輸入設備SO_LINGER 確保數(shù)據安全且可靠的傳送出去。參數(shù) optval代表欲設置的值,參數(shù)optlen則為optval的長度。 返回值 成功則返回0,若有錯誤則返回-1

46、,錯誤原因存于errno。附加說明 EBADF 參數(shù)s并非合法的socket處理代碼ENOTSOCK 參數(shù)s為一文件描述詞,非socketENOPROTOOPT 參數(shù)optname指定的選項不正確。EFAULT 參數(shù)optval指針指向無法存取的內存空間。范例 參考getsockopt()。 shutdown(終止socket通信) 相關函數(shù) socket,connect表頭文件 #include定義函數(shù) int shutdown(int s,int how);函數(shù)說明 shutdown()用來終止參數(shù)s所指定的socket連線。參數(shù)s是連線中的socket處理代碼,參數(shù)how有下列幾種情況:

47、 how=0 終止讀取操作。how=1 終止傳送操作how=2 終止讀取及傳送操作返回值 成功則返回0,失敗返回-1,錯誤原因存于errno。錯誤代碼 EBADF 參數(shù)s不是有效的socket處理代碼ENOTSOCK 參數(shù)s為一文件描述詞,非socketENOTCONN 參數(shù)s指定的socket并未連線 socket(建立一個socket通信) 相關函數(shù) accept,bind,connect,listen表頭文件 #include#include定義函數(shù) int socket(int domain,int type,int protocol);函數(shù)說明 socket()用來建立一個新的soc

48、ket,也就是向系統(tǒng)注冊,通知系統(tǒng)建立一通信端口。參數(shù)domain 指定使用何種的地址類型,完整的定義在/usr/include/bits/socket.h 內,底下是常見的協(xié)議: PF_UNIX/PF_LOCAL/AF_UNIX/AF_LOCAL UNIX 進程通信協(xié)議PF_INETAF_INET Ipv4網絡協(xié)議PF_INET6/AF_INET6 Ipv6 網絡協(xié)議 PF_IPX/AF_IPX IPX-Novell協(xié)議PF_NETLINK/AF_NETLINK 核心用戶接口裝置PF_X25/AF_X25 ITU-T X.25/ISO-8208 協(xié)議PF_AX25/AF_AX25 業(yè)余無線A

49、X.25協(xié)議PF_ATMPVC/AF_ATMPVC 存取原始ATM PVCsPF_APPLETALK/AF_APPLETALK appletalk(DDP)協(xié)議PF_PACKET/AF_PACKET 初級封包接口參數(shù) type有下列幾種數(shù)值:SOCK_STREAM 提供雙向連續(xù)且可信賴的數(shù)據流,即TCP。支持OOB 機制,在所有數(shù)據傳送前必須使用connect()來建立連線狀態(tài)。 SOCK_DGRAM 使用不連續(xù)不可信賴的數(shù)據包連接SOCK_SEQPACKET 提供連續(xù)可信賴的數(shù)據包連接SOCK_RAW 提供原始網絡協(xié)議存取SOCK_RDM 提供可信賴的數(shù)據包連接 SOCK_PACKET 提供

50、和網絡驅動程序直接通信。protocol用來指定socket所使用的傳輸協(xié)議編號,通常此參考不用管它,設為0即可。返回值 成功則返回socket處理代碼,失敗返回-1。 錯誤代碼 EPROTONOSUPPORT 參數(shù)domain指定的類型不支持參數(shù)type或protocol指定的協(xié)議ENFILE 核心內存不足,無法建立新的socket結構EMFILE 進程文件表溢出,無法再建立新的socket EACCESS 權限不足,無法建立type或protocol指定的協(xié)議ENOBUFS/ENOMEM 內存不足EINVAL 參數(shù)domain/type/protocol不合法 范例 參考connect()

51、。 添加評論 3:44 | 固定鏈接 | 引用通告 (0) | 記錄它 固定鏈接 關閉 alarm(設置信號傳送鬧鐘) 相關函數(shù) signal,sleep表頭文件 #include定義函數(shù) unsigned int alarm(unsigned int seconds);函數(shù)說明 alarm()用來設置信號SIGALRM在經過參數(shù)seconds指定的秒數(shù)后傳送給目前的進程。如果參數(shù)seconds 為0,則之前設置的鬧鐘會被取消,并將剩下的時間返回。 返回值 返回之前鬧鐘的剩余秒數(shù),如果之前未設鬧鐘則返回0。范例 #include#includevoid handler() printf(hellon);main()int i;signal(SIGALRM,handler);alarm(5);for(i=1;i7;i+)printf(sleep %d .n,i);sleep(1);執(zhí)行 sleep 1 .sleep 2 .sleep 3 .sleep 4 .sleep 5 .hellosleep 6 . kill(傳送信號給指定的進

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論