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

📄 linux 常用c函数(中文版)-接口处理.htm

📁 常用的嵌入式linux开发的C函数库
💻 HTM
📖 第 1 页 / 共 5 页
字号:
    <TD vAlign=top><FONT face=宋体 
      size=2>#include&lt;sys/socket.h&gt;<BR>#include&lt;netinet/in.h&gt;<BR>#include&lt;arpa/inet.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>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>

⌨️ 快捷键说明

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