域套接字UNIX

时间:2024-05-31 10:03:45

1、域套接字是最原始的套接字通信方式,是完成同一主机之间多个进程间通信

2、由于不需要跨主机进行通信了,那么就无需使用ip地址和端口号了

3、通信本质:依然使用的是内核空间

4、域套接字的通信介质为套接字文件 bcd-lsp

5、域套接字也分为流式域套接字报式域套接字

6、跟网络通信中相关函数的区别

#include <sys/types.h>

#include <sys/socket.h>

int socket(int domain, int type, int protocol);

功能:为网络通信提供一个端点,并返回该端点的文件描述符,文件描述符使用原则为最小未分配原则

参数:

domain:通信域,可以选择协议族

        Name                                 Purpose                 Man page

         AF_UNIX, AF_LOCAL      非跨主机通信         详细信息请看 man 7 unix

type:         指定通信语义,常用的通信语义如下

        SOCK_STREAM 支持传输层的TCP通信方式

        SOCK_DGRAM 支持传输层的UDP通信方式

        SOCK_RAW 支持原始套接字通信

protocol: 当第二个参数中没有指定对应传输协议时,第三个参数要指定,如果第二个参数中已经确定了传输协议,那么第三个参数填0即可

        1.如果参数type是 SOCK_STREAM或SOCK_DGRAM时,参数protocol可以填0

        2.如果参数type没有指定是TCP还是UDP通信时,第三个参数protocol可以使用                 IPPROTO_TCP或IPPROTO_UDP来确定

返回值:成功返回一个新的套接字文件描述符,失败返回-1 并置位错误码

7、地址信息结构体的不同

#include <sys/types.h>

#include <sys/socket.h>

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

功能:为给定的套接字文件描述符绑定IP地址和端口号

参数:

sockfd :要被绑定的套接字文件描述符

addr :   通用地址信息结构体,实际的地址信息,取决于地址族,

                AF_INET 参见 man 7 ip ,                         ‘

               ’AF_UNIX 参见 man 7 unix

对于本地通信的套接字地址信息结构体:

        struct sockaddr_un {

                sa_family_t sun_family;    /* 通信域 */

                char sun_path[108];          /* 套接字文件路径 */

        };

         /* 套接字文件路径 */  必须是不存在的文件

addrlen: addr 的大小

返回值: 成功 0,失败 -1 并置位错误码

8、判断文件是否存在,以及删除文件

#include <unistd.h>

int access(const char *pathname, int mode);

功能:判断给定的文件是否具有给定的权限

参数1:要判断的文件路径

参数2:要判断的权限

                R_OK:读权限

                W_OK:写权限

                X_OK:可执行权限

                F_OK:是否存在

返回值:如果文件存在并具有要求的所有权限,则返回0,否则返回-1并置位错误码

int unlink(const char *pathname);

功能:删除指定的文件

参数:要删除的文件路径

返回值:成功 0,失败 -1  并置位错误码