除了rwx权限以外,还有s权限,这就是设置用户ID和设置组ID,它能让进程有效用户ID和有效组ID等于程序拥有者的uid和gid
apue中的access.c,open函数以有效用户ID及有效用户组ID执行其访问权限测试,access函数以实际用户ID及实际用户组ID执行其访问权限测试
#include "include/apue.h"
#include <fcntl.h>
int main(int argc, char *argv[])
{
if (argc != 2)
err_quit("usage: a.out <pathname>");
if (access(argv[1], R_OK) < 0)
err_ret("access error for %s", argv[1]);
else
printf("read access OK\n");
if (open(argv[1], O_RDONLY) < 0)
err_ret("open error for %s", argv[1]);
else
printf("open for reading OK\n");
exit(0);
}
open和access都失败
将access文件属主设为root,并设置用户ID位
设置用户ID位后,open成功,access失败