我正在编写一个程序来模仿 cp 实用程序。但是,我无法获得文件权限以正常工作。我知道它们存储在结构中stat
并存储在st_mode
场与stat
.
我的问题是我没有获得组或其他类别的写入权限,即我得到-rwxr-xr-x
作为文件的权限,即使源文件是-rwxrwxrwx
。我设置权限的语句如下。
if ( (dest_fd = open(dest_file, O_WRONLY|O_CREAT, (stats.st_mode & S_IRUSR)|(stats.st_mode & S_IWUSR)|(stats.st_mode & S_IXUSR)|(stats.st_mode & S_IRGRP)|(stats.st_mode & S_IWGRP)|(stats.st_mode & S_IXGRP)|(stats.st_mode & S_IROTH)|(stats.st_mode & S_IWOTH)| (stats.st_mode & S_IXOTH))) < 0)
{
printf("There was a problem opening the destination file.");
exit(EXIT_FAILURE);
}//ends the if statement opening the destination file.
到目前为止的答案都是正确的,问题是umask
,而不是清除umask
(如果您的程序是多线程的或者您可能正在调用任何创建文件的库函数,这很危险)我会对待umask
作为用户配置变量,您不允许修改,而是调用fchmod
在创建文件后对其进行操作,以授予它们您想要的最终权限。无论如何,这对于授予某些权限(例如 suid/sgid)可能是必要的,每当文件被修改时,某些内核就会删除这些权限。我最初也会使用模式创建文件0600
,这样打开它和更改权限之间就不存在竞争条件,在此期间其他用户可以获得该文件的打开句柄。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)