⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 14.htm

📁 Linux系统函数用法的详细介绍
💻 HTM
📖 第 1 页 / 共 5 页
字号:
      <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>char * inet_ntoa(struct in_addr       in);<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体       size=2>inet_ntoa()用来将参数in所指的网络二进制的数字转换成网络地址,然后将指向此网络地址字符串的指针返回。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>返回值 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>成功则返回字符串指针,失败则返回NULL。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>        <DIV align=right><BR><FONT face=宋体 size=2><A       name=linuxc274></A></FONT></DIV></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2><BR>listen(等待连接) </FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体     size=2>socket,bind,accept,connect<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体     size=2>#include&lt;sys/socket.h&gt;<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>int listen(int s,int       backlog);<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>listen()用来等待参数s       的socket连线。参数backlog指定同时能处理的最大连接要求,如果连接数目达此上限则client端将收到ECONNREFUSED的错误。Listen()并未开始接收连线,只是设置socket为listen模式,真正接收client端连线的是accept()。通常listen()会在socket(),bind()之后调用,接着才调用accept()。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>返回值 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体   size=2>成功则返回0,失败返回-1,错误原因存于errno<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>附加说明 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体       size=2>listen()只适用SOCK_STREAM或SOCK_SEQPACKET的socket类型。如果socket为AF_INET则参数backlog       最大值可设至128。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>错误代码 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>EBADF 参数sockfd非合法socket处理代码<BR>EACCESS       权限不足<BR>EOPNOTSUPP 指定的socket并未支援listen模式。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体       size=2>#include&lt;sys/types.h&gt;<BR>#include&lt;sys/socket.h&gt;<BR>#include&lt;netinet/in.h&gt;<BR>#include&lt;arpa/inet.h&gt;<BR>#include&lt;unistd.h&gt;<BR>#define       PORT 1234<BR>#define MAXSOCKFD 10<BR>main()<BR>{<BR>int       sockfd,newsockfd,is_connected[MAXSOCKFD],fd;<BR>struct sockaddr_in       addr;<BR>int addr_len = sizeof(struct sockaddr_in);<BR>fd_set       readfds;<BR>char buffer[256];<BR>char msg[ ] =”Welcome to server!”;<BR>if       ((sockfd =       socket(AF_INET,SOCK_STREAM,0))&lt;0){<BR>perror(“socket”);<BR>exit(1);<BR>}<BR>bzero(&amp;addr,sizeof(addr));<BR>addr.sin_family       =AF_INET;<BR>addr.sin_port = htons(PORT);<BR>addr.sin_addr.s_addr =       htonl(INADDR_ANY);<BR>if(bind(sockfd,&amp;addr,sizeof(addr))&lt;0){<BR>perror(“connect”);<BR>exit(1);<BR>}<BR>if(listen(sockfd,3)&lt;0){<BR>perror(“listen”);<BR>exit(1);<BR>}<BR>for(fd=0;fd&lt;MAXSOCKFD;fd++)<BR>is_connected[fd]=0;<BR>while(1){<BR>FD_ZERO(&amp;readfds);<BR>FD_SET(sockfd,&amp;readfds);<BR>for(fd=0;fd&lt;MAXSOCKFD;fd++)<BR>if(is_connected[fd])       FD_SET(fd,&amp;readfds);<BR>if(!select(MAXSOCKFD,&amp;readfds,NULL,NULL,NULL))continue;<BR>for(fd=0;fd&lt;MAXSOCKFD;fd++)<BR>if(FD_ISSET(fd,&amp;readfds)){<BR>if(sockfd       = =fd){<BR>if((newsockfd = accept       (sockfd,&amp;addr,&amp;addr_len))&lt;0)<BR>perror(“accept”);<BR>write(newsockfd,msg,sizeof(msg));<BR>is_connected[newsockfd]       =1;<BR>printf(“cnnect from       %s\n”,inet_ntoa(addr.sin_addr));<BR>}else{<BR>bzero(buffer,sizeof(buffer));<BR>if(read(fd,buffer,sizeof(buffer))&lt;=0){<BR>printf(“connect       closed.\n”);<BR>is_connected[fd]=0;<BR>close(fd);<BR>}else<BR>printf(“%s”,buffer);<BR>}<BR>}<BR>}<BR>}<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>$ ./listen<BR>connect from       127.0.0.1<BR>hi I am client<BR>connected closed.<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>        <DIV align=right><BR><FONT face=宋体 size=2><A       name=linuxc275></A></FONT></DIV></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2><BR>ntohl(将32位网络字符顺序转换成主机字符顺序)     </FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>htonl,htons,ntohs<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体     size=2>#include&lt;netinet/in.h&gt;<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>unsigned long int ntohl(unsigned long       int netlong);<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体       size=2>ntohl()用来将参数指定的32位netlong转换成主机字符顺序。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>返回值 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>返回对应的主机字符顺序。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>参考getservent()。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>        <DIV align=right><BR><FONT face=宋体 size=2><A       name=linuxc276></A></FONT></DIV></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2><BR>ntohs(将16位网络字符顺序转换成主机字符顺序)     </FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>htonl,htons,ntohl<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体     size=2>#include&lt;netinet/in.h&gt;<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>unsigned short int ntohs(unsigned       short int netshort);<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体       size=2>ntohs()用来将参数指定的16位netshort转换成主机字符顺序。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>返回值 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>返回对应的主机顺序。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>参考getservent()。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>        <DIV align=right><BR><FONT face=宋体 size=2><A       name=linuxc277></A></FONT></DIV></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2><BR>recv(经socket接收数据) </FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体       size=2>recvfrom,recvmsg,send,sendto,socket<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体       size=2>#include&lt;sys/types.h&gt;<BR>#include&lt;sys/socket.h&gt;<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>int recv(int s,void *buf,int       len,unsigned int flags);<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体       size=2>recv()用来接收远端主机经指定的socket传来的数据,并把数据存到由参数buf       指向的内存空间,参数len为可接收数据的最大长度。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>参数 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>flags一般设0。其他数值定义如下:<BR>MSG_OOB       接收以out-of-band 送出的数据。<BR>MSG_PEEK       返回来的数据并不会在系统内删除,如果再调用recv()会返回相同的数据内容。<BR>MSG_WAITALL强迫接收到len大小的数据后才能返回,除非有错误或信号产生。<BR>MSG_NOSIGNAL此操作不愿被SIGPIPE信号中断返回值成功则返回接收到的字符数,失败返回-1,错误原因存于errno中。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>错误代码 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>EBADF 参数s非合法的socket处理代码<BR>EFAULT       参数中有一指针指向无法存取的内存空间<BR>ENOTSOCK 参数s为一文件描述词,非socket。<BR>EINTR       被信号所中断<BR>EAGAIN 此动作会令进程阻断,但参数s的socket为不可阻断<BR>ENOBUFS       系统的缓冲内存不足。<BR>ENOMEM 核心内存不足<BR>EINVAL 传给系统调用的参数不正确。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>参考listen()。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>        <DIV align=right><BR><FONT face=宋体 size=2><A       name=linuxc278></A></FONT></DIV></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2><BR>recvfrom(经socket接收数据) </FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体       size=2>recv,recvmsg,send,sendto,socket<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体       size=2>#include&lt;sys/types.h&gt;<BR>#include&lt;sys/socket.h&gt;<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>int recvfrom(int s,void *buf,int       len,unsigned int flags ,struct sockaddr *from ,int   *fromlen);<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体 size=2>recv()用来接收远程主机经指定的socket       传来的数据,并把数据存到由参数buf 指向的内存空间,参数len 为可接收数据的最大长度。参数flags       一般设0,其他数值定义请参考recv()。参数from用来指定欲传送的网络地址,结构sockaddr       请参考bind()。参数fromlen为sockaddr的结构长度。<BR></FONT></TD></TR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -