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

📄 14.htm

📁 Linux系统函数用法的详细介绍
💻 HTM
📖 第 1 页 / 共 5 页
字号:
  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>返回值 </FONT></DIV></TD>    <TD vAlign=top><FONT face=宋体       size=2>成功则返回接收到的字符数,失败则返回-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>/*利用socket的UDP client<BR>此程序会连线UDP       server,并将键盘输入的字符串传给server。<BR>UDP server       范例请参考sendto()。<BR>*/<BR>#include&lt;sys/stat.h&gt;<BR>#include&lt;fcntl.h&gt;<BR>#include&lt;unistd.h&gt;<BR>#include&lt;sys/typs.h&gt;<BR>#include&lt;sys/socket.h&gt;<BR>#include&lt;netinet/in.h&gt;<BR>#include&lt;arpa/inet.h&gt;<BR>#define       PORT 2345<BR>#define SERVER_IP “127.0.0.1”<BR>main()<BR>{<BR>int       s,len;<BR>struct sockaddr_in addr;<BR>int addr_len =sizeof(struct       sockaddr_in);<BR>char buffer[256];<BR>/* 建立socket*/<BR>if((s =       socket(AF_INET,SOCK_DGRAM,0))&lt;0){<BR>perror(“socket”);<BR>exit(1);<BR>}<BR>/*       填写sockaddr_in*/<BR>bzero(&amp;addr,sizeof(addr));<BR>addr.sin_family =       AF_INET;<BR>addr.sin_port = htons(PORT);<BR>addr.sin_addr.s_addr =       inet_addr(SERVER_IP);<BR>while(1){<BR>bzero(buffer,sizeof(buffer));<BR>/*       从标准输入设备取得字符串*/<BR>len =read(STDIN_FILENO,buffer,sizeof(buffer));<BR>/*       将字符串传送给server端*/<BR>sendto(s,buffer,len,0,&amp;addr,addr_len);<BR>/*       接收server端返回的字符串*/<BR>len =       recvfrom(s,buffer,sizeof(buffer),0,&amp;addr,&amp;addr_len);<BR>printf(“receive:       %s”,buffer);<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>(先执行udp server 再执行udp client)<BR>hello       /*从键盘输入字符串*/<BR>receive: hello /*server端返回来的字符串*/<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>        <DIV align=right><BR><FONT face=宋体 size=2><A       name=linuxc279></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>recvmsg(经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,recvfrom,send,sendto,sendmsg,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/socktet.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 recvmsg(int s,struct msghdr       *msg,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>recvmsg()用来接收远程主机经指定的socket传来的数据。参数s为已建立好连线的socket,如果利用UDP协议则不需经过连线操作。参数msg指向欲连线的数据结构内容,参数flags一般设0,详细描述请参考send()。关于结构msghdr的定义请参考sendmsg()。<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>成功则返回接收到的字符数,失败则返回-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>参考recvfrom()。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>        <DIV align=right><BR><FONT face=宋体 size=2><A       name=linuxc280></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>send(经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>sendto,sendmsg,recv,recvfrom,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 send(int s,const void * msg,int       len,unsigned int falgs);<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>send()用来将数据由指定的socket       传给对方主机。参数s为已建立好连接的socket。参数msg指向欲连线的数据内容,参数len则为数据长度。参数flags一般设0,其他数值定义如下<BR>MSG_OOB       传送的数据以out-of-band 送出。<BR>MSG_DONTROUTE 取消路由表查询<BR>MSG_DONTWAIT       设置为不可阻断运作<BR>MSG_NOSIGNAL 此动作不愿被SIGPIPE 信号中断。<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>成功则返回实际传送出去的字符数,失败返回-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>参考connect()<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>        <DIV align=right><BR><FONT face=宋体 size=2><A       name=linuxc281></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>sendmsg(经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>send,sendto,recv,recvfrom,recvmsg,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 sendmsg(int s,const strcut msghdr       *msg,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>sendmsg()用来将数据由指定的socket传给对方主机。参数s为已建立好连线的socket,如果利用UDP协议则不需经过连线操作。参数msg       指向欲连线的数据结构内容,参数flags一般默认为0,详细描述请参考send()。<BR>结构msghdr定义如下<BR>struct       msghdr<BR>{<BR>void *msg_name; /*Address to send to /receive from .       */<BR>socklen_t msg_namelen; /* Length of addres data */<BR>strcut iovec *       msg_iov; /* Vector of data to send/receive into */<BR>size_t msg_iovlen;       /* Number of elements in the vector */<BR>void * msg_control; /* Ancillary       dat */<BR>size_t msg_controllen; /* Ancillary data buffer length */<BR>int       msg_flags; /* Flags on received message */<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>成功则返回实际传送出去的字符数,失败返回-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>参考sendto()。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>        <DIV align=right><BR><FONT face=宋体 size=2><A       name=linuxc282></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>sendto(经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>send , sendmsg,recv , recvfrom ,       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 sendto ( int s , const void * msg,       int len, unsigned int flags, const <BR>struct sockaddr * to , int tolen )       ;<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>sendto()       用来将数据由指定的socket传给对方主机。参数s为已建好连线的socket,如果利用UDP协议则不需经过连线操作。参数msg指向欲连线的数据内容,参数flags       一般设0,详细描述请参考send()。参数to用来指定欲传送的网络地址,结构sockaddr请参考bind()。参数tolen为sockaddr的结果长度。<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>成功则返回实际传送出去的字符数,失败返回-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>WNOTSOCK canshu s为一文件描述词,非socket。<BR>EINTR       被信号所中断。<BR>EAGAIN 此动作会令进程阻断,但参数s的soket为补课阻断的。<BR>ENOBUFS       系统的缓冲内存不足。<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>#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>#define PORT 2345       /*使用的port*/<BR>main(){<BR>int sockfd,len;<BR>struct sockaddr_in       addr;<BR>char buffer[256];<BR>/*建立socket*/<BR>if(sockfd=socket       (AF_INET,SOCK_DGRAM,0))&lt;0){<BR>perror       (“socket”);<BR>exit(1);<BR>}<BR>/*填写sockaddr_in 结构*/<BR>bzero ( &amp;addr,       sizeof(addr)       );<BR>addr.sin_family=AF_INET;<BR>addr.sin_port=htons(PORT);<BR>addr.sin_addr=hton1(INADDR_ANY) 

⌨️ 快捷键说明

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