c - Unix 套接字的 sockaddr_un.sun_path 区分大小写吗?

标签 c linux macos sockets case-sensitive

struct sockaddr_un serverUNIXAddress;

以下代码在 Mac OS 10.9 下有效,但在 Linux 下无效。它不会死,但从客户端写入服务器,只能在 Mac OS 下工作。我完全理解它不应该适用于任何一个。为什么它在 Mac OS 下工作?如果没有发现错误,这是套接字实现中的错误,还是难以移植的特性?

客户端.c

//Server domain
serverUNIXAddress.sun_family = AF_UNIX; 

//Server name
strcpy(serverUNIXAddress.sun_path, "rockPaperScissors");

服务器.c

strcpy(serverUNIXAddress.sun_path, "RockPaperScissors");
//Create file
bind(serverFd, serverSockAddrPtr, serverLen); 
//Maximum pending connection length
listen (serverFd, 5); 
////[...]

最佳答案

在文件系统中创建了一个 Unix 域套接字文件。 OS X 上的默认文件系统不区分大小写。因此,客户端使用不区分大小写的匹配找到服务器的套接字。

您可以在 OS X 上使用区分大小写的文件系统。如果您这样做并在那里创建了套接字文件,那么匹配也会区分大小写。

我假设 Linux 支持不区分大小写的文件系统。如果您使用其中之一并在其上创建套接字文件,则匹配将不区分大小写。

关于c - Unix 套接字的 sockaddr_un.sun_path 区分大小写吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27283739/

相关文章:

python - 在 python 中使用控制台命令

linux - 使用 GPU 从多个 JPG 图像创建 GIF 动画

macos - 为 OpenCV 3.1.0 安装 ArUco 时出现问题

macos - 我如何知道(在脚本中)在 mac os x 中打开了多少个终端?

c - #ifndef 指令的使用

c - rand 命令行并发编程

linux - 如何获取 bash 中某些文件夹的总大小?

macos - 容器内的 Docker 套接字权限

PHP 扩展错误 :

c++ - inotify 和 epoll 的区别