Linux下socketpair使用总结

本文介绍了socketpair函数的基本概念和用途,该函数用于创建一对无名的相互连接的套接字,支持全双工通信。文章提供了socketpair函数的声明、参数含义及返回值,并通过示例演示了如何在同一个进程中实现读写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.socketpair函数:

#include <sys/types.h>
#include <sys/socket.h>
int socketpair(int d, int type, int protocol, int sv[2]);

socketpair函数创建一对无名的相互连接的套接字。

返回值:成功返回0,创建好的套接字分别为sv[1]和sv[2];否则返回-1,错误码保存于errno中。

2.基本用法: 

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

2.如果往一个套接字中写入,只能从另一个套接字中读取;

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

3.使用实例:

#include <stdio.h> 
#include <string.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <error.h> 
#include <errno.h> 
#include <sys/socket.h> 
#include <stdlib.h> 
 
const char* str = "SOCKET PAIR TEST.";
 
int main(int argc, char* argv[]){
    char buf[128] = {0};
    int socket_pair[2]; 
    pid_t pid; 
 
    if(socketpair(AF_UNIX, SOCK_STREAM, 0, socket_pair) == -1 ) { 
        printf("Error, socketpair create failed, errno(%d): %s\n", errno, strerror(errno));
        return EXIT_FAILURE; 
    } 
 
    int size = write(socket_pair[0], str, strlen(str));
    //可以读取成功;
    read(socket_pair[1], buf, size);
    printf("Read result: %s\n",buf);
    return EXIT_SUCCESS;    
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值