#include <sys/types.h> #include <sys/socket.h> int socketpair(int domain, int type, int protocol, int sockfd[2]);
int fd[2];
pid_t pid;
socketpair(AF_UNIX, SOCKET_STREAM, 0, fd);	// 创建管道
if ( (pid = fork()) == 0) {	// 子进程
    close(fd[0]);	// 关闭管道的父进程端
    dup2(fd[1], STDOUT_FILENO);	// 复制管道的子进程端到标准输出
    dup2(fd[1], STDIN_FILENO);	// 复制管道的子进程端到标准输入
    close(fd[1]);	// 关闭已复制的读管道
    /* 使用exec执行命令 */
} else {	// 父进程
    close(fd[1]);	// 关闭管道的子进程端
    /* 现在可在fd[0]中读写数据 */
    shutdown(fd[0], SHUT_WR);	// 通知对端数据发送完毕
    /* 读取剩余数据 */
    close(fd[0]);	// 关闭管道
    /* 使用wait系列函数等待子进程退出并取得退出代码 */
}
struct msghdr {
            void            *msg_name;
            int             msg_namelen;
            struct iovec    *msg_iov;
            __kernel_size_t msg_iovlen;
            void            *msg_control;
            __kernel_size_t msg_controllen;
            unsigned        msg_flags;
        };struct cmsghdr {
           socklen_t cmsg_len;    /* data byte count, including header */
           int       cmsg_level;  /* originating protocol */
           int       cmsg_type;   /* protocol-specific type */
           /* followed by unsigned char cmsg_data[]; */
       };Linux高级进程间通信:UNIX域套接字,布布扣,bubuko.com
原文:http://blog.csdn.net/wan_hust/article/details/38560333