编程接口指南

选择建议性或强制性锁定

对于强制性锁定,文件必须是设置了 set-group-ID 位且未设置组执行权限位的常规文件。如果不符合其中任一条件,则所有记录锁定均为建议性锁定。

按照如下方式设置强制性锁定。

#include <sys/types.h>

#include <sys/stat.h>



 int mode;

 struct stat buf;

 	...

 	if (stat(filename, &buf) < 0) {

 		perror("program");

 		exit (2);

 	}

 	/* get currently set mode */

 	mode = buf.st_mode;

 	/* remove group execute permission from mode */

 	mode &= ~(S_IEXEC>>3);

 		/* set 'set group id bit' in mode */

 	mode |= S_ISGID;

 	if (chmod(filename, mode) < 0) {

 		perror("program");

 		exit(2);

 	}

 	... 

当系统在执行文件时,操作系统会忽略记录锁定。所有带有记录锁定的文件都不应设置执行权限。

chmod(1) 命令还可用于将文件设置为允许强制性锁定。


$ chmod +l file

此命令在文件模式中设置 O20n0 权限位,它指示对文件进行强制性锁定。如果 n 是偶数,则此位将会解释为启用强制性锁定。如果 n 是奇数,则此位将会解释为“执行时设置组 ID”。

当使用 -l 选项请求长列表格式时,ls(1) 命令显示以下设置:


$ ls -l file

此命令显示以下信息:


-rw---l--- 1 user group size mod_time file

权限中的字母 "l" 指示 set-group-ID 位已设置。由于设置了 set-group-ID 位,因此启用强制性锁定。此外,还启用了 set group ID 的一般语义。