代码之家  ›  专栏  ›  技术社区  ›  mawia

af_Unix域-为什么只使用本地文件名?

  •  7
  • mawia  · 技术社区  · 17 年前

    在Unix域中使用socket时,建议对安装在本地磁盘上的目录目录使用路径名。Unix域只允许在同一台计算机上工作的进程之间进行进程间通信。

    你能解释一下上面这句话吗?它是关于Unix域中的套接字的。

    谢谢!

    3 回复  |  直到 12 年前
        1
  •  12
  •   user39113    17 年前

    Unix域套接字或IPC套接字(进程间通信套接字)是类似于Internet套接字的数据通信端点,但不使用网络协议进行通信。它用于POSIX操作系统中的进程间通信。正确的标准POSIX术语是POSIX本地IPC套接字。

    Unix域连接显示为字节流,与网络连接很相似,但所有数据都保留在本地计算机中。Unix域套接字使用文件系统作为地址名空间,也就是说,它们被进程引用为文件系统中的inode。这允许两个不同的进程打开同一个套接字进行通信。但是,实际的通信(数据交换)不使用文件系统,而是使用内核内存中的缓冲区。

    除了发送数据之外,进程还可以使用sendmsg()和recvmsg()系统调用,通过UNIX域套接字连接发送文件描述符。

        2
  •  4
  •   Alnitak    17 年前

    Unix域套接字的端点由文件系统中的文件(而不是主机/端口)表示。

    但是,进程之间的通信是在本地系统中完成的,不会导致在任何地方存储可查找的文件。

    使用文件系统作为端点的命名空间的好处是,可以应用常规的文件权限和ACL—如果无法打开端点,则无法连接。IP套接字没有这种机制。

        3
  •  4
  •   Stefano Borini    17 年前

    这意味着,如果您在两台机器A和B共享的NFS磁盘上创建一个af_unix套接字,则不能有一个将数据写入unix套接字的进程和一个从该套接字读取数据的进程。

    通信发生在内核级别,您只能在位于同一内核的进程之间传输数据。