文件和目录之文件长度

stat结构成员st_size表示以字节为单位的文件长度。此字段只对普通文件、目录文件和符号链接有意义。

对于普通文件,其文件长度可以是0,在读这种文件时,将得到文件结束(end-of-file)指示。

对于目录,文件长度通常是一个数(例如16或512)的倍数。

对于符号链接,文件长度是文件名中的实际字节数。例如:

lrwxrwxrwx 1 root root 8 01-02 05:56 lib -> /usr/lib

其中,文件长度8就是路径名/usr/lib的长度(注意,因为符号链接文件长度总是由st_size指示,所以它并不包含通常c语言用作名字结尾的null字符)。

现今,大多数UNIX系统提供字段st_blksize和st_blocks。其中,第一个是对文件I/O较合适的块长度,第二个是所分配的实际512字节块的数量。在文件I/O之I/O的效率篇中,提到了当我们将st_blksize用于读操作时,读一个文件所需的时间量最少。为了效率的缘故、标准I/O库也试图以此读、写st_blksize个字节。

应当了解到是,不同的UNIX版本其st_blocks所用的单位可能不是512字节的块。使用此值并不是可移植的。

文件中的空洞

空洞是由所设置的偏移量超过文件尾端,并写了某些数据后造成的。对于没有写过的字节位置,read函数读到的字节是0.

如果使用实用程序(例如cat(1))复制这种文件,那么所有这些空洞都会被填满,其中所有实际数据字节皆填写为0.

posted @ 2014-01-02 22:15  ITtecman  阅读(1174)  评论(0编辑  收藏  举报