原创 14.9.1文件属性的意义

2008-7-2 22:59 4596 8 8 分类: 工程师职场

14.9.1      文件属性的意义


当你读取一个文件的属性时,会返回一个struct stat结构体。本小节接下来解释文件属性的名字、属性的数据类型以及它们所代表的含义。读取文件属性的函数参照14.9.2小节。


头文件‘sys/stat.h’中声明了本小节中使用的所有的标志符:


Struct     stat                                                                               数据类型


Stat结构体返回关于文件属性的信息。该结构体至少包含以下数据成员:


Mode_t   st_mode


指定文件的模式,包括文件类型信息和文件权限位。


Ino_t       st_ino


文件序列号,用来区分与其它表示相同设备的文件。


Dev_t      st_dev


确定该设备包含的文件。St_inost_dev一起来唯一的确定一个文件。St_dev的值在重启或系统崩溃过程中不一定会保持一致。


Nlink_t    st_nlink


链接到文件的硬链接数目。该计数器记录有多少目录项链接到该文件,如果该计数器的值减位0时,因为没有进程打开该文件所以这个文件会被丢弃。符号链接不会计数。


Uid_t       st_uid


文件所有者的用户ID


Gid_t      st_gid


文件的组ID


Off_t      st_size


bytes来显示一个合法文件的大小。对于一个真实的设备文件该选项没有确定的意义。对于符号链接来说表示该链接指向的文件的长度。


Time_t    st_atime


表示最后访问该文件的时间


Unsigned long int    st_atime_usec


最后访问该文件时间的部分内容


Time_t    st_mtime


最后修改该文件内容的时间


Unsigned long int    st_mtime_usec


最后修改文件内容时间的部分内容


Time_t    st_ctime


最后修改文件属性的时间


Unsigned long int    st_ctime_usec


最后修改文件属性的时间的部分内容


Blkcnt_t  st_blocks


用于统计该文件占有的磁盘空间,用512byte的块来衡量。文件占有磁盘块的数量与文件的大小并不严格成比例有两个原因:文件系统可能使用一些块来保存内部记录;文件可能是稀疏的,该文件可能存在一些空洞,这些空洞不一定实际占有磁盘的空间。


你可以使用与st_size来比较大小的方法来确定一个文件是否存在空洞,如下所示:


st.st_blocks*512 < st.st_size)。当一个文件只有少量空洞的时候该测试在测试文件是否存在时不一定会起作用。对于实际应用来说,这个问题不会太大。


Unsigned int    st_blksize


在读写文件时采用的最佳块大小,用bytes为单位。你可能会使用这个数字来分配一个文件的读写缓冲区的大小。与st_blocks无关。


为了扩展对大型文件的支持,甚至在32位的机器上能够处理大小为263文件,因此关于struct stat的新的定义时必须的。


Struct stat64                                                                                数据类型


该类型的数据成员与struct stat的数据成员有相同的名字。唯一的区别就是st_ino,st_sizest_blocks的类型不同,因为要支持更大的数值。


Mode_t   st_mode


指定文件的模式,包括文件类型信息和文件权限位。


Ino64_t   st_ino


文件序列号,用来区分与其它表示相同设备的文件。


Dev_t      st_dev


确定该设备包含的文件。St_inost_dev一起来唯一的确定一个文件。St_dev的值在重启或系统崩溃过程中不一定会保持一致。


Nlink_t    st_nlink


链接到文件的硬链接数目。该计数器记录有多少目录项链接到该文件,如果该计数器的值减位0时,因为没有进程打开该文件所以这个文件会被丢弃。符号链接不会计数。


Uid_t       st_uid


文件所有者的用户ID


Gid_t      st_gid


文件的组ID


Off64_t   st_size


bytes来显示一个合法文件的大小。对于一个真实的设备文件该选项没有确定的意义。对于符号链接来说表示该链接指向的文件的长度。


Time_t    st_atime


表示最后访问该文件的时间


Unsigned long int    st_atime_usec


最后访问该文件时间的部分内容


Time_t    st_mtime


最后修改该文件内容的时间


Unsigned long int    st_mtime_usec


最后修改文件内容时间的部分内容


Time_t    st_ctime


最后修改文件属性的时间


Unsigned long int    st_ctime_usec


最后修改文件属性的时间的部分内容


Blkcnt64_t      st_blocks


用于统计该文件占有的磁盘空间,用512byte的块来衡量。文件占有磁盘块的数量与文件的大小并不严格成比例有两个原因:文件系统可能使用一些块来保存内部记录;文件可能是稀疏的,该文件可能存在一些空洞,这些空洞不一定实际占有磁盘的空间。


你可以使用与st_size来比较大小的方法来确定一个文件是否存在空洞,如下所示:


st.st_blocks*512 < st.st_size)。当一个文件只有少量空洞的时候该测试在测试文件是否存在时不一定会起作用。对于实际应用来说,这个问题不会太大。


Unsigned int    st_blksize


在读写文件时采用的最佳块大小,用bytes为单位。你可能会使用这个数字来分配一个文件的读写缓冲区的大小。与st_blocks无关。


有些文件属性使用一些特定的已存在的数据类型名来指定这些属性。这些都是众所周知的整型的别名。这些转定义类型名既在头文件‘sys/types.h’又在‘sys/stat.h’中定义。列表如下:


Mode_t


这是一个整型数据类型用来代表文件模式。在GNU系统中,与unsigned int具有相同的意义。


Ino_t


这是一个算术数据类型用来表示文件序列号。(在UNIX中有时称为inode数字)在GNU系统中,等同于unsigned long int。如果源代码使用_FILE_OFFSET_BITS==64来编译时,该类型则使用ino64_t代替。


Ino64_t


这是一个算术数据类型用来表示文件序列号用于支持大型文件。在GNU系统中,等同于unsigned long int。如果源代码使用_FILE_OFFSET_BITS==64来编译时,该类型在使用ino_t类型名的情况下同样有效。


Dev_t


这是一个算术数据类型用来表示文件设备号。在GNU系统中,等同于int


Nlink_t


这是一个算术数据类型用来表示文件链接数目。在GNU系统中,等同于unsigned short int


Blkcnt_t


这是一个算术数据类型用来表示数据块的数目。在GNU系统中等同于unsigned long int。如果使用_FILE_OFFSET_BITS==64来编译时,则使用blkcnt64_t代替。


Blkcnt64_t


这是一个算术数据类型用来表示文件序列号用于支持大型文件。在GNU系统中,等同于unsigned long long int。如果源代码使用_FILE_OFFSET_BITS==64来编译时,该类型在使用blkcnt64_t类型名的情况下同样有效。

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /2 下一条