UNIX环境高级编程读书笔记(二)—目录和文件 (3)
来源:互联网 发布:算法c语言 豆瓣 编辑:程序博客网 时间:2024/05/20 05:25
六、文件的属性
11
名称: | stat/fstat/lstat |
目标: | 得到文件的属性。 |
头文件: | #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> |
函数原形: | int stat(const char *file_name,struct stat *buf) int fstat(int filedes, struct stat *buf) int lstat(const char *file_name,struct stat *buf) |
参数: | file_name 文件名 filedes 文件描述符 buf 指向buffer的指针 |
返回值: | -1 遇到错误 |
| 0 成功返回 |
Stat把文件fname 的信息复制到指针bufp所指的结构中。Stat包括的信息有
st_mode 文件类型和许可权限
st_uid 用户所有者ID
st_gid 所属组ID
st_size 所占字节数
st_nlink 文件链接数
st_mtime 文件最后修改时间
st_atime 文件最后访问时间
st_actime 文件属性最后改变时间
下面的程序得到这些属性,并显示它们。
/*2_7.c*/ #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> int main(int ac, char *av[ ]) { struct stat info; if(ac>1) if(stat(av[1],&info)!=-1) { show_stat_info(av[1],&info); return 0; } else perror(av[1]); return 1; } show stat_info(char *fname,struct stat *buf) { printf(“mode : %o/n”,buf->st_mode); /*显示文件模式字段*/ printf(“links : %d/n”,buf->st_nlink); /*显示链接数*/ printf(“user : %d/n”,buf->st_uid); /*显示用户名ID*/ printf(“group : %d/n”,buf->st_gid); /*显示组ID*/ printf(“size : %d/n”,buf->st_size); /*显示文件大小*/ printf(“modtime : %d/n”,buf->st_mtime); /*显示文件的最后修改时间*/ printf(“name:%s/n”,fname); /*显示文件名*/ } |
fstat函数类似于stat,但是当命名的文件是一个符号连接时,lstat返回该符号连接的有关信息,而不是由该符号连接引用的文件的信息。
编译并运行fileinfo.c:
[root@LINUX root]#cc –o fileinfo fileinfo.c [root@LINUX root]#./fileinfo fileinfo.c mode:100664 links: 1 user:500 group:120 size:1106 modtime:965158604 name:fileinfo.c |
这个程序就是ls –l 命令实现代码的一部分,但是会和ls –l的输出有些不同,比如说时间的表示,用户和组ID的表示,文件权限的表示。涉及到了Linux编码的问题,这里不作介绍,大家可以查阅相关质料。
七、文件的存取性和权限
12.
名称: | access |
目标: | 确定文件的可存取性 |
头文件: | #include < unistd.h> |
函数原形: | int access(const char *pathname ,int mode); |
参数: | pathname 文件名 mode 新的所有权和特殊属性。 |
返回值: | -1 遇到错误 |
| 0 成功返回 |
其中,mode是表4-5中所列常数的逐位或运算。
access函数的mode常数有:
R_OK 测试读许可权
W_OK 测试写许可权
X_OK 测试执行许可权
F_OK 测试文件是否存在
当用open函数打开一个文件时,内核以进程的有效用户ID和有效组ID为基础执行其存取许可权测试。有时,进程也希望按区实际用户ID和实际组ID来测试其存取能力。例如当一个进程使用设置用户ID,或设置组ID特征作为另一个用户(或组)运行时,就可能需要。
access函数是按实际用户ID和实际组ID进行存取许可权测试的。下面是程序例子。
/*2_8.c*/ #include <stdio.h> #include <fcntl.h> #include <sys/types.h> #include <unistd.h> int main(int argc,char *argv[]) { if(access(argv[1],R_OK)<0) printf(“access error for %s/n”,argv[1]; else printf(“read access OK/n”); if(open(argv[1],O_RDONLY)<0) printf(“open for reading OK/n”); else printf(“open for reading OK/n”); } |
本文转自:http://blog.chinaunix.net/u1/59291/showart.php?id=538546
- UNIX环境高级编程读书笔记(二)—目录和文件 (3)
- UNIX环境高级编程读书笔记(二)—目录和文件 (3)
- UNIX环境高级编程读书笔记(二)—目录和文件(1)
- UNIX环境高级编程读书笔记(二)—目录和文件 (2)
- UNIX环境高级编程读书笔记(二)—目录和文件 (4)
- UNIX环境高级编程读书笔记(二)—目录和文件(1)
- UNIX环境高级编程读书笔记(二)—目录和文件 (2)
- UNIX环境高级编程读书笔记(二)—目录和文件 (4)
- UNIX环境高级编程读书笔记(二)—目录和文件(1)
- UNIX环境高级编程读书笔记(二)—目录和文件 (2)
- 文件和目录(二)--unix环境高级编程读书笔记
- Unix环境高级编程——第四章 目录和文件
- UNIX环境编程--目录和文件
- 《unix环境高级编程》 读书笔记 (3)
- Unix环境高级编程读书笔记(3)
- UNIX环境高级编程读书笔记(3)
- UNIX环境高级编程-读书笔记-网络编程(二)
- linux信号(二)--unix环境高级编程读书笔记
- 水晶报表printmode的ActiveX打印问题总结
- sql server 函数总结
- 新手报到!
- siteMesh 2.3 (2)标签 decorator:usePage和 decorator:useHtmlPage
- Oracle中Decode()函数使用技巧
- UNIX环境高级编程读书笔记(二)—目录和文件 (3)
- 从SQL Server中导入/导出 Excel 的基本方法
- UNIX环境高级编程读书笔记(二)—目录和文件 (4)
- 一篇解毒的文章
- siteMesh 2.3(3) 标签 page:applyDecorator page:apply-decorator page:param decorator:getProperty
- UNIX环境高级编程读书笔记(四)—出错处理
- UNIX环境高级编程读书笔记(五)—系统文件和信息 (2)
- UNIX环境高级编程读书笔记(五)—系统文件和信息 (1)
- 西方极乐世界