如何在不创建套接字文件的情况下使用unix域套接字

时间:2015-04-03 07:09:05

标签: linux sockets unix-socket

在Linux中,有没有使用AF_LOCAL(unix域套接字)在不使用文件的情况下在进程(IPC)之间进行通信的示例? (在只读文件系统上)

我必须使用Unix域套接字,但我没有在系统上进行文件创建/写入访问。

提前谢谢。

1 个答案:

答案 0 :(得分:6)

您可以使用"抽象套接字地址"创建一个unix域套接字。只需将传递给sun_path的{​​{1}}中的sockaddr_un字符串的第一个字符设为bind即可。在这个初始NUL之后,将一个字符串写入'\0'的剩余部分,并用NUL(或其他任何东西)将其填充到sun_path

以这种方式创建的套接字不会有任何文件系统条目,而是放入一个不可见的系统范围的套接字命名空间。套接字名称​​不是以空字符结尾的字符串;它是以NUL开头的UNIX_PATH_MAX长度字符串,任何其他NUL都没有特殊意义。因此,填写该名称至关重要,否则您会在该名称中添加额外的未初始化的内存垃圾,并产生意外结果。按照惯例,这通常是用NUL垫完成的,但它取决于你。

有关更多信息,请参阅unix(7),特别是有关抽象套接字地址的部分。还可以找到一个完整的例子here