gpt4 book ai didi

c - 如何在 C 中创建具有特定权限的 Unix Domain Socket?

转载 作者:太空狗 更新时间:2023-10-29 16:23:05 26 4
gpt4 key购买 nike

我有一个简单的代码,比如:

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, SOCK_STREAM, 0);
bind(fd, (sockaddr*)(&address), sizeof(address));
listen(fd, 100);

关于c - 如何在 C 中创建具有特定权限的 Unix Domain Socket?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20171747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com