《socket实现进程间通信 》.docx
文本预览下载声明
HYPERLINK /ast_224/article/details/3962221 socket实现进程间通信
分类: HYPERLINK /ast_224/article/category/484780 socket编程 2009-03-06 10:31 4775人阅读 HYPERLINK /ast_224/article/details/3962221 \l comments 评论(2) HYPERLINK javascript:void(0); \o 收藏 收藏 HYPERLINK /ast_224/article/details/3962221 \l report \o 举报 举报
使用socket实现进程间通信:(UNIX domain中面向连接通信)??? 使用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通信,且建立的通信是双向的通信。man unix内容如下:NAME( 名称)??? unix, PF_UNIX, AF_UNIX, PF_LOCAL, AF_LOCAL ? 用于本地内部进程通讯的套接 字。SYNOPSIS( 总览 )??? #include sys/socket.h??? #include sys/un.h??? unix_socket = socket(PF_UNIX, type, 0);??? error = socketpair(PF_UNIX, type, 0, int *sv);DESCRIPTION( 描述 )??? PF_UNIX (也称作 PF_LOCAL ) 套接字族用来在同一机器上的提供有效的进程间通讯.Unix 套接字可以是匿名的(由 socketpair(2)创建), 也可以与套接字类型文件相关联. Linux 还支持一种抽象名字空间, 它是独立于文件系统的.??? 有效的类型有: SOCK_STREAM 用于面向流的套接字, SOCK_DGRAM 用于面向数据报的套接字,其可以保存消息界限. Unix 套接字总是可靠的,而且不会重组数据报.??? Unix 套接字支持把文件描述符或者进程的信用证明作为数据报的辅助数据传递给 其它进程.ADDRESS FORMAT( 地址格式 )??? unix 地址定义为文件系统中的一个文件名或者抽象名字空间中的一个单独的字符串. 由 socketpair(2) 创建的套接字是匿名的.对于非匿名的套接字,目标地址 可使用 connect(2) 设置. 本地地址可使用 bind(2) 设置. 当套接字连接上而且它没有一个本地地址时, 会自动在抽象名字空间中生成一个唯一的地址.??? #define UNIX_PATH_MAX?? 108??? struct sockaddr_un {??? sa_family_t???? sun_family;???? /* AF_UNIX */??? char??? sun_path[UNIX_PATH_MAX];??????? /* 路径名 */??? };??? sun_family 总是包含 AF_UNIX. sun_path 包含空零结尾的套接字在文件系统中的路径名. 如果 sun_path 以空零字节开头,它指向由 Unix 协议模块维护的抽象名字空间. 该套接字在此名字空间中的地址由 sun_path 中的剩余字节给定. 注意抽象名字空间的名字都不是空零终止的.SOCKET OPTIONS( 套接字选项 )??? 由 于 历 史 原 因, 这些套接字选项通过 SOL_SOCKET 类型确定, 即使它们是 PF_UNIX 指定的. 它们可以由 setsockopt(2) 设置. 通过指定 SOL_SOCKET 作 为套接字族用 getsockopt(2) 来读取.??? SO_PASSCRED 允许接收进程辅助信息发送的信用证明. 当设置了该选项且套接字 尚未连接时, 则会自动生成一个抽象名字空间的唯一名字. 值为一个整数布尔标 识.ANCILLARY MESSAGES( 辅助信息 )??? 由 于 历 史 原 因, 这些辅助信息类型通过 SOL_SOCKET 类型确定, 即使它们是 PF_UNIX 指定的. 要发送它们, 可设置结构 cmsghdr 的 cmsg_level 字 段 为 SOL_SOCKET, 并 设 置 cmsg_type 字段为其类型. 要获得更多信息, 请参看 cmsg(3).??? SCM_RIGHTS??? 为其他进程发送或接收一套打开文件描述符. 其数据部分包含一个文件 描述符的整型数组. 已传文件描述符的效果就如它们已由 du
显示全部