gpt4 book ai didi

c - 文件系统上的 UNIX 套接字在哪里?

转载 作者:行者123 更新时间:2023-12-03 11:51:15 27 4
gpt4 key购买 nike

我正在使用 Unix 域套接字。想知道它在系统中的位置。

如果我使用系统调用创建套接字对

socketpair(AF_UNIX,SOCK_STREAM,0,fd) ;

我读过它是未命名的套接字(未使用绑定(bind)绑定(bind)到路径名的套接字)。
另一方面,命名套接字或更好的套接字使用绑定(bind)调用绑定(bind)到文件系统路径名,存储在我们指定的某个目录中。
例如
 struct sockaddr_un {
sa_family_t sun_family; /* AF_UNIX */
char sun_path[UNIX_PATH_MAX]; /* pathname */
};

这里 sun_path 可以是/tmp/sock 文件。

所以,同样,我想知道未命名的套接字在系统中或内存或内核中的任何位置是否有任何位置?

提前致谢。

最佳答案

我不是内核专家,所以把它当作一个(受过教育的?)猜测。

#include <sys/un.h>
#include <sys/socket.h>
#include <stdio.h>
#include <string.h>

int main()
{
struct sockaddr_un sun;
socklen_t socklen;
int fd[2];
if(socketpair(AF_UNIX,SOCK_STREAM,0,fd) < 0) {
perror("socketpair");
return 111;
}
socklen = sizeof(sun);
memset(&sun, 0, sizeof sun);
sun.sun_path[0] = '!'; /* replace with any character */
if(getsockname(fd[0], (struct sockaddr *)&sun, &socklen) < 0) {
perror("getsockname");
return 111;
}
printf("sunpath(%s)\n", sun.sun_path);
return 0;
}

这个程序说套接字没有相应的路径,所以我的猜测是 unix 套接字对永远不会与文件名相关联——它只是作为内核中的数据结构保持事件状态,直到所有引用都关闭。

当然欢迎更好的答案:)

关于c - 文件系统上的 UNIX 套接字在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15951835/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com