C语言中socketpair的用法介绍

  介绍

本篇内容主要讲解“C语言中socketpair的用法介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言中socketpair的用法介绍”吧!

socketpair()函数的声明:

# include  & lt; sys/types.h>   # include  & lt; sys/socket.h>   int  socketpair (int  d, int 类型,int 协议,int  sv [2]);

socketpair()函数用于创建一对无名的,相互连接的套接子只
如果函数成功,则返回0,创建好的套接字分别是sv[0]和sv[1],否则返回1,错误码保存于errno中。

基本用法:,

<李>

这对套接字可以用于全双工通信,每一个套接字既可以读也可以写。例如,可以往sv[0]中写,从sv[1]中读,或者从sv[1]中写,从sv[0]中读,,

<李>

如果往一个套接字(如sv[0])中写入后,再从该套接字读时会阻塞,只能在另一个套接字中(sv[1])上读成功,,

<李>

读、写操作可以位于同一个进程,也可以分别位于不同的进程,如父子进程。如果是父子进程时,一般会功能分离,一个进程用来读,一个用来写。因为文件描述副sv[0]和sv[1]是进程共享的,所以读的进程要关闭写描述符,反之,写的进程关闭读描述符只

举例:,

一、读写操作位于同一进程

# include  & lt; stdio.h>,   # include  & lt; string.h>,   # include  & lt; unistd.h>,   # include  & lt; sys/types.h>,   # include  & lt; error.h>,   # include  & lt; errno.h>,   # include  & lt; sys/socket.h>,   # include  & lt; stdlib.h>,   ,   const  char *, str =,“SOCKET  PAIR 测试!”   ,   命令行参数个数,int 主要(int  char *, argv []) {   ,,,char  buf [128],=, {0};   ,,,int  socket_pair [2],,   ,,,pid_t  pid,,   ,   ,,,如果(socketpair (AF_UNIX, SOCK_STREAM,, 0,, socket_pair),==, 1,), {,   ,,,,,,,printf(“错误,,socketpair  create 失败了,,errno (% d):, % s \ n",, errno,, strerror (errno));   ,,,,,,,return  EXIT_FAILURE;,   ,,,},   ,   ,,,int  size =,写(socket_pair [0],, str,, strlen (str));   ,,,//可以读取成功;   ,,,(阅读socket_pair[1],,但,,大小);   ,,,printf (“Read 结果:% s \ n", buf);   ,,,return  EXIT_SUCCESS;,,,,   }

二,读写操作位于不同进程

# include  & lt; stdio.h>,   # include  & lt; string.h>,   # include  & lt; unistd.h>,   # include  & lt; sys/types.h>,   # include  & lt; error.h>,   # include  & lt; errno.h>,   # include  & lt; sys/socket.h>,   # include  & lt; stdlib.h>,   ,   const  char *, str =,“SOCKET  PAIR 测试!”   ,   命令行参数个数,int 主要(int  char *, argv []) {   ,,,char  buf [128],=, {0};   ,,,int  socket_pair [2],,   ,,,pid_t  pid,,   ,   ,,,如果(socketpair (AF_UNIX, SOCK_STREAM,, 0,, socket_pair),==, 1,), {,   ,,,,,,,printf(“错误,,socketpair  create 失败了,,errno (% d):, % s \ n",, errno,, strerror (errno));   ,,,,,,,return  EXIT_FAILURE;,   ,,,},   ,   ,,,pid =,叉();   ,,,如果(pid  & lt;, 0), {   ,,,,,,,printf(“错误,,fork 失败了,,errno (% d):, % s \ n",, errno,, strerror (errno));   ,,,,,,,return  EXIT_FAILURE;   ,,,},else 如果(pid 祝辞,0),{   ,,,,,,,//关闭另外一个套接字   ,,,,,,,关闭(socket_pair [1]);   ,,,,,,,int  size =,写(socket_pair [0],, str,, strlen (str));   ,,,,,,,printf (pid:“Write 成功,,,% d \ n",, getpid ());   ,   ,,,},else 如果(pid ==, 0), {   ,,,,,,,//关闭另外一个套接字   ,,,,,,,关闭(socket_pair [0]);   ,,,,,,,读(socket_pair[1],,但,,sizeof (buf)),,,,,,,,,   ,,,,,,,printf (“Read 结果:% s,, pid:, % d \ n",,但,,getpid ());   ,,,}   ,   ,,,(,),{   ,,,,,,,睡眠(1);   ,,,}   ,   ,,,return  EXIT_SUCCESS;,,,,   }

sendmsg, recvmsg,派遣函数的使用

sendmsg, recvmsg,发送三个函数的头文件:

# include  & lt; sys/types.h>,,   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

C语言中socketpair的用法介绍