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



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

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

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() == '') {
*addr.sun_path = '';
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);

最新更新