如何为不同用户 C++ 创建具有 read/write 权限的 unix 套接字文件?

How to create a unix socket file with read/write permissions for different users C++?

我在 linux 的 2 个不同用户中有 2 个不同的应用程序 运行。 我希望它们通过 unix 套接字连接,并且由于 unix 域套接字由路径名已知,因此 2 个应用程序需要共享相同的路径和创建的套接字文件。 这里的问题是,在服务器中绑定套接字时,一切都很好,但是,当尝试从第二个应用程序连接时,出现错误 "access denied"。

这是我用于服务器的代码,它确实创建了套接字文件。

  int main() {
    struct sockaddr_un addr;
    char buf[100];
    int fd,cl,rc;

    if (argc > 1) socket_path=argv[1];

    if ( (fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
      perror("socket error");
      exit(-1);
    }

    memset(&addr, 0, sizeof(addr));
    addr.sun_family = AF_UNIX;
    if (*socket_path.c_str() == '[=11=]') {
      *addr.sun_path = '[=11=]';
      strncpy(addr.sun_path+1, socket_path.c_str()+1, sizeof(addr.sun_path)-2);
    } else {
      strncpy(addr.sun_path, socket_path.c_str(), sizeof(addr.sun_path)-1);
      unlink(socket_path.c_str());
    }

    if (bind(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
      perror("bind error");
      exit(-1);
    }

    if (listen(fd, 5) == -1) {
      perror("listen error");
      exit(-1);
    }

     return 0;
}

我已经解决了这个问题,只是按照@Sam Varshavchik 的建议使用 chmod 函数更改权限。

由于两个用户属于同一个组,我使用S_IRWXG设置了组的所有权限。

chmod(socket_path.c_str(), S_IRWXG);