如何为不同的用户创建一个具有读写权限的unix套接字文件C++?

问题描述 投票:0回答:1

我有两个不同的应用程序运行在两个不同的用户中,我想让他们通过unix套接字连接,由于unix域套接字是由一个路径名知道的,所以这两个应用程序需要共享相同的路径和相同的套接字文件。

以下是我在服务器上使用的代码,他创建了socket文件。

  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() == '\0') {
      *addr.sun_path = '\0';
      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;
}
c++ linux sockets c++11 unix-socket
1个回答
0
投票

我按照@Sam Varshavchik的建议,用chmod函数改变了权限就解决了这个问题。

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

chmod(socket_path.c_str(), S_IRWXG);
© www.soinside.com 2019 - 2024. All rights reserved.