在 Linux 中,有没有使用 AF_LOCAL(unix domain sockets)在不使用文件的情况下在进程(IPC)之间进行通信的例子? (在只读文件系统上)
我必须使用 Unix 域套接字,但我没有在系统上创建/写入文件的权限。
提前谢谢你。
最佳答案
您可以使用“抽象套接字地址”创建一个 unix 域套接字。只需将传递给 bind
的 sockaddr_un
中的 sun_path
字符串的第一个字符设置为 '\0'
。在这个初始 NUL 之后,将一个字符串写入 sun_path
的其余部分,并用 NUL(或其他任何内容)将其填充到 UNIX_PATH_MAX
。
以这种方式创建的套接字将没有任何文件系统条目,而是将被放置在一个不可见的系统范围套接字命名空间中。套接字名称不是以空字符结尾的字符串;它是以 NUL 开头的 UNIX_PATH_MAX 长度字符串,任何其他 NUL 都没有特殊意义。因此,填充该名称非常重要,否则您会将额外的未初始化内存垃圾放入该名称中,从而产生意想不到的结果。按照惯例,这通常是使用 NUL 垫完成的,但这取决于您。
关于linux - 如何在不创建套接字文件的情况下使用 unix 域套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29427769/