unix/linux文件属性及其系统调用[Linux安全]
本文“unix/linux文件属性及其系统调用[Linux安全]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
TABLE 1. 获得文件属性(stat,fstat,lstat)
2. 文件范例2.1 文件范例包含一下几种2.2 文件范例测试的宏2.3 文件范例测试实例3. 文件的权限3.2 关于权限的小细节3.3 设置用户ID和设置组ID 3.4 文件权限操作的系统调用3.4.1 umask函数3.4.2 chmod和fchmod 3.4.3 chown fchown和lchown 4. 文件的时间4.1 utime函数
文件有其属性,如范例,权限,长度,状况等,本文将对此举行总结,同时学习相关的系统调用.
1. 获得文件属性(stat,fstat,lstat)
三个stat函数可以返回文件的信息.
int stat(const char *pathname, struct stat *buf);int fstat(int filedes, struct stat *buf);int lstat(const char *pathname, struct stat *buf);返回值:成功 0失利 -1
三个函数的辨别是,stat 第一个参数是文件名,fstat 第一个参数文件描写符,lstat 第一参数是文件名,且他返回的是标记链接的信息,而不是标记链接引用文件的信息.
第二个参数buf构造体指针,是一个我们必须供应的构造.其基本的情势:struct stat { mode_t st_mode; /* 文件范例和文件权限 */ ino_t st_ino; /* 与该文件关联的inode */ dev_t st_dev; /* 保存的文件设备 */ nlink_t st_nlink; /* 该文件上硬链接的个数 */ uid_t st_uid; /* 文件属主UID */ gid_t st_gid; /* 文件属主GID */ off_t st_size; /* 文件字节数,普通文件有效 */ time_t st_atime; /* 文件上一次被拜候的时间 */ time_t st_mtime; /* 文件内容上一次被改正的时间 */ time_t st_ctime; /* 文件权限、属主、组或内容上一次被改正的时间 */ }利用stat函数最多的大概是`ls -l`号令,来获得一个文件的全部信息.下面我们就按照stat的内容来理解文件属性信息.
2. 文件范例构造体stat的st_mode里就有文件范例的信息(st_mode同时包含文件范例和文件权限).
2.1 文件范例包含一下几种1. 普通文件/regular file.最长用的文件范例.数据可以是文本也可以是二进制文件,对unix内核来说没有辨别.
2. 目录文件/directory file.这种文件包含了其他文件的名字和指向这些文件有关信息的指针.
3. 块特别文件/block special file.这种文件范例供应对设备带缓冲的拜候.每次拜候以固定长度为单位举行.
4. 字符特别文件/ character special file这种文件范例供应对设备不带缓冲的拜候.每次拜候长度可变.
5. FIFO这种范例文件用于进程间通信,也成为命名管道.
6. 套接字 / socket这种文件范例用于进程间的网络通信.
7. 标记链接 / sysbolic link这种范例文件指向另一个文件.
2.2 文件范例测试的宏关于一个文件,可以用下面的宏来肯定文件范例.这些宏的参数是 stat中的st_mode成员.
S_ISREG() 测试能否是普通文件S_ISDIR() 测试能否是目录文件S_ISBLK() 测试能否是块特别文件S_ISCHR() 测试能否是字符特别文件S_ISFIFO() 测试能否管道S_ISSOCK() 测试是套接子S_ISLNK() 测试能否是链接文件
2.3 文件范例测试实例
int main(int argc, char *argv[])
{ int ret;int i;struct stat stat_buf;char *p_file_type;
for (i = 1; i < argc; i++) { if ((ret = lstat(argv[i], &stat_buf)) == -1) { fprintf(stderr, "%s ——> lstat error!\n", argv[i]);continue;} if (S_ISREG(stat_buf.st_mode))
p_file_type = "regular";else if (S_ISDIR(stat_buf.st_mode))
p_file_type = "dir";else if (S_ISCHR(stat_buf.st_mode))
p_file_type = "character special";else if (S_ISBLK(stat_buf.st_mode))
p_file_type = "block special";else if (S_ISLNK(stat_buf.st_mode))
p_file_type = "symbolic link";else if (S_ISFIFO(stat_buf.st_mode))
p_file_type = "fifo";else if (S_ISSOCK(stat_buf.st_mode))
p_file_type = "socket";else p_file_type = "unknow";printf("%s ——> %s\n",argv[i], p_file_type);}
return 0;}
以上是“unix/linux文件属性及其系统调用[Linux安全]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |