2013-04-11 82 views
2

我正在使用Unix域套接字。想知道它在系统中的位置。文件系统上的UNIX套接字在哪里?

如果我使用的是系统调用

socketpair(AF_UNIX,SOCK_STREAM,0,fd) ; 

我看过它创建一个socketpair是无名插座(未绑定使用绑定路径名插槽)。 另一方面,命名套接字或更好的套接字绑定到文件系统路径名称使用绑定调用get存储在我们指定的某个目录中。 例如

struct sockaddr_un { 
       sa_family_t sun_family;    /* AF_UNIX */ 
       char  sun_path[UNIX_PATH_MAX]; /* pathname */ 
      }; 

这里sun_path可的/ tmp /袜子文件。

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

在此先感谢。

+0

你是什么意思'在哪里'? FD是内核数据结构的句柄。对于任何FD,包括套接字FD,以及包括用于未命名的Unix套接字的套接字FD都是如此。未命名与它无关。 – EJP 2013-04-11 22:46:59

+0

@EJP:我无法知道哪个数据结构或FD表是什么。 – 2013-04-12 09:46:31

回答

4

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

#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的socketpair不会与文件名关联 - 它只是停留活着,在内核中的数据结构,直到所有引用已关闭。

更好的答案是当然欢迎:)

相关问题