UNIX域协议(无名套接字)

关于什么是UNIX域套接字可以参考:
这里主要介绍非命名的UNIX域套接字的用法。

1.socketpair函数
先看man手册:

SYNOPSIS
       #include <sys/types.h>          /* See NOTES */
       #include <sys/socket.h>

       int socketpair(int domain, int type, int protocol, int sv[2]);

DESCRIPTION
       The  socketpair()  call creates an unnamed pair of connected sockets in
       the specified domain, of the specified type, and using  the  optionally
       specified  protocol.   For  further  details  of  these  arguments, see
       socket(2).

       The descriptors used in referencing the new  sockets  are  returned  in
       sv[0] and sv[1].  The two sockets are indistinguishable.

RETURN VALUE
       On  success,  zero is returned.  On error, -1 is returned, and errno is
       set appropriately.

功能:创建一个全双工的流管道
参数:
domain:协议家族,为AF_LOCAL或AF_UNIX
type:套接字类型。可以是SOCK_STREAM或者SOCK_DGRAM。这两种都是可靠的
protocol:协议类型。为0
sv:返回套接字对,这个是输出参数。返回的两个描述符都是可读可写的。
返回值:成功返回0,失败返回-1.
补充:pipe创建的匿名管道的半双工的,pipefd[0]用于读,pipefd[1]用于写。
注意:由于创建的每个套接字都是没有名字的,这就意味着无关进程不能使用它们。

2.一个简单的例子:
父进程给子进程发送一个数据给子进程,子进程收到数据后最数据进行加一操作,再发回给父进程。
先上自己的一个头文件:
comm.h

#ifndef __COMM_H__ #define __COMM_H__ #include<errno.h> #include<stdlib.h> #define ERR_EXIT(m) \ do \ { \ perror(m); \ exit(EXIT_FAILURE); \ } while(0) #endif // __COMM_H__

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zysjfj.html