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_ino和st_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_size和st_blocks的类型不同,因为要支持更大的数值。
Mode_t st_mode
指定文件的模式,包括文件类型信息和文件权限位。
Ino64_t st_ino
文件序列号,用来区分与其它表示相同设备的文件。
Dev_t st_dev
确定该设备包含的文件。St_ino和st_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条评论)
登录后参与讨论