微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何创建具有特定权限的Unix域套接字?

我有一个简单的代码,如:
sockaddr_un address;
address.sun_family = AF_UNIX;
strcpy(address.sun_path,path);
unlink(path);

int fd = socket(AF_UNIX,SOCK_STREAM,0);
bind(fd,(sockaddr*)(&address),sizeof(address));
listen(fd,100);

我想原子地创建具有特定权限的Unix域套接文件,例如:0777.对于umask或其他任何内容,手册不会对套接文件权限发表任何意见。即使,如果umask确实影响套接文件,那么它不是原子的方式 – 在多线程程序中。

我希望有一种方法来实现我的目标,而不使用umask()调用的同步。

一个解决方案是创建具有所需权限的目录,然后在其中创建套接字(示例代码,不考虑错误检查和缓冲区溢出):
// Create a directory with the proper permissions
mkdir(path,0700);
// Append the name of the socket
strcat(path,"/socket_name");

// Create the socket normally
sockaddr_un address;
address.sun_family = AF_UNIX;
strcpy(address.sun_path,path);
int fd = socket(AF_UNIX,100);

原文地址:https://www.jb51.cc/bash/388183.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐