unix/linux文件属性及其系统调用

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

  3. 文件的权限st_mode里包含了针对文件的访问权限位。所有文件类型都有访问权限。

  3.1 9个访问权限位

  S_IRUSR 用户读S_IWUSR 用户写S_IXUSR 用户执行

  S_IRGRP 组读S_IWGRP 组写S_IXGRP 组执行

  S_IROTH 其他组读S_IWOTH 其他组写S_IXOTH 其他组执行访问权限分为三组,用户,组,其他。每组有读、写、执行权限。

  3.2 关于权限的小细节1. 用名字打开任意类型的文件时,对该名字中包含的每一个目录都有要有执行权限。这就是为什么对于目录的执行权限位常被成为搜索位的原因。

  2. 要执行文件不需要一定有读权限3. 要输出某文件,只需要对其上级目录有执行和写权限,对其自身无要求。

  3.3 设置用户ID和设置组ID与进程相关的ID有很多,常用的有实际用户ID,实际组ID,有效用户ID,有效组ID.实际用户ID和实际组ID表示我们是谁。他们在登录时取自口令文件的登录项。

  有效用户ID,有效组ID决定了我们的文件访问权限。通常他们等于实际用户ID和实际组ID.在执行一个程序文件时,进程的有效用户ID通常就是实际用户ID,有效组ID通常是实际组ID.但可以在文件模式字(st_mode)中设置特殊标志,其含义是“当执行此文件时,将进程的有效用户ID设置为文件所有者ID(st_uID)”。相应的有设置组ID.例如,一个普通用户执行root的文件,而且此文件设置了用户ID位,那么进程执行时将有超级用户权限,多么危险的事情啊!

  设置用户ID和设置组ID包含在st_mode中。可以用S_ISUID和S_ISGID测试。

  3.4 文件权限操作的系统调用3.4.1 umask函数umask函数为进程设置文件模式创建屏蔽子,返回以前的值。(没有出错返回)

  [code] #include <sys/stat.h> mode_t umast(mode_t cmask);返回值:以前的文件模式创建的屏蔽字[/code] cmask是9个常量中的若干个位“或”构成的。简单的理解就是你不想要哪位权限那么就给他“或”上。umask(S_IWOTH| S_IWGRP),意思是禁止组写和其他组写权限。

  3.4.2 chmod和fchmod [code] #include <sys/stat.h> int chmod(const char *pathname, mode_t mode);int fchmod(int filedes, mode_t mode);return: sucessful 0 failed -1 [/code]改变一个文件的权限位,进程的有效用户必须等与文件的所有者,活着是supper user. mode的取值S_IRWXU 用户读写执行S_IRUSR 用户读S_IWUSR 用户写S_IXUSR 用户执行

  S_IRWXG 组读写执行S_IRGRP 组读S_IWGRP 组写S_IXGRP 组执行

  S_IRWXO 其他读写执行S_IROTH 其他组读S_IWOTH 其他组写S_IXOTH 其他组执行

  S_ISUID 执行时设置用户ID S_ISGID 执行时设置组ID S_ISVTX 没讨论

  相对于以前常用的9个多了6个,三个全包含的,两个设置ID和一个粘住位(不讨论)。

  3.4.3 chown fchown和lchown [code] #include <unistd.h> int chown(const char *pathname, uid_t owner, gid_t group);int fchown(int filedes, uid_t owner, gid_t group);int lchown(const char *pathname, uid_t owner, gid_t group);return: sucessful 0 failed -1 [/code]除了所引用的文件是符号链接外,这三个函数操作相似。符号链接的情况下,lchown改变的是符号链接本身,不是他指向的文件。

  4. 文件的时间与每个文件相关的三个时间值st_atime 文件数据的最后访问时间st_ctime 文件i节点的最后更改时间st_mtime 文件数据最后更改时间4.1 utime函数[code] #include <utime.h> int utime(const char *pathname, const struct utimebuf *times);return: sucessful 0 failed -1 [/code] [code] struct utimebuf { time_t actime;time_t modtime;} [/code] a. 当times为NULL,则访问时间和修改时间都设为当前时间b. times不空,访问时间和修改时间修改st_ctime,不能被修改,当utime成功返回后, st_ctime自动更新。

[1][2]

明天的希望,让我们忘了今天的痛苦

unix/linux文件属性及其系统调用

相关文章:

你感兴趣的文章:

标签云: