📄 linux 常用c函数(中文版)-接口处理.htm
字号:
<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>
<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<sys/stat.h><BR>#include<fcntl.h><BR>#include<unistd.h><BR>#include<sys/typs.h><BR>#include<sys/socket.h><BR>#include<netinet/in.h><BR>#include<arpa/inet.h><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))<0){<BR>perror(“socket”);<BR>exit(1);<BR>}<BR>/*
填写sockaddr_in*/<BR>bzero(&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,&addr,addr_len);<BR>/*
接收server端返回的字符串*/<BR>len =
recvfrom(s,buffer,sizeof(buffer),0,&addr,&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<sys/types.h><BR>#include<sys/socktet.h><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<sys/types.h><BR>#include<sys/socket.h><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<sys/types.h><BR>#include<sys/socket.h><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 < sys/types.h
><BR>#include < sys/socket.h ><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 < sys/types.h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -