2013-04-11 53 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不會與文件名關聯 - 它只是停留活着,在內核中的數據結構,直到所有引用已關閉。

更好的答案是當然歡迎:)

相關問題