`
duoerbasilu
  • 浏览: 1484204 次
文章分类
社区版块
存档分类
最新评论

unix环境高级编程-文件长度与截断

 
阅读更多

4.12 文件长度

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

对于普通文件,其文件的长度可以是0,在读此文件的时候,将得到文件结束指示。

对于目录,文件长度通常是一个数的倍数,

对于符号链接,文件长度是文件明中的世界字节数。

现今,大多数UNIX系统提供的字段st_blksize和st_blocks。其中第一个是对文件I/O较为合适的的块长度。第二个是所分配的实际512字节块的数量。在3.9节中我们提到过,在读操作的时候,设这st_blksize时候,效率是最高的。

文件中的空洞。

在3.6节我们提到过文件空洞,由于设置的偏移量大于了文件的实际长度,并且写了数据,就会造成文件空洞现象。

书中使用了 ls -l 命令对一个文件测试 大小是8M,但是使用du -a 的时候,显示该文件使用了磁盘空间总量的272个512字节块。很明显此文件有很多空洞。

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

4.13 文件截短

有时候我们需要在文件尾端处截取一些数据以缩短文件。讲一个文件清空为0.是一个特例。在打开文件时候使用O_TRUNC标志就可以做到这一点。

#include <unistd.h>

int truncate(const char* pathname,off_t length)

int ftruncate(int filedes,off_t length);

若成功则返回0,出错则返回-1

查看GNUC手册。

int truncate (const char *filename, off t length) [Function]
The truncate function changes the size of filename to length. If length is shorter
than the previous length, data at the end will be lost. The file must be writable by
the user to perform this operation.
If length is longer, holes will be added to the end. However, some systems do not
support this feature and will leave the file unchanged.
When the source file is compiled with _FILE_OFFSET_BITS == 64 the truncate function
is in fact truncate64 and the type off_t has 64 bits which makes it possible to
handle files up to 263 bytes in length.
The return value is 0 for success, or

分享到:
评论

相关推荐

    TCP-IP详解卷3:TCP事务协议,HTTP,NNTP和UNIX域协议

    第三卷的内容细节覆盖了当今TCP/IP编程人员和网络管理员必须熟练掌握的四个基本方面: T/TCP (TCP事务协议),这是对TCP的扩展,使客户--服务器间的事务传输更快更有效和更可靠; HTTP (超文本传送协议),这是飞速...

    TCPIP详解--共三卷

    10.3 Unix选路守护程序 96 10.4 RIP:选路信息协议 96 10.4.1 报文格式 96 10.4.2 正常运行 97 10.4.3 度量 98 10.4.4 问题 98 10.4.5 举例 98 10.4.6 另一个例子 100 10.5 RIP版本2 102 10.6 OSPF:开放最短路径...

    TCP-IP详解卷3:TCP事务协议

    4.4 TIME_WAIT状态的截断 48 4.5 利用TAO跳过三次握手 51 4.6 小结 55 第5章 T/TCP协议的实现:插口层 56 5.1 概述 56 5.2 常量 56 5.3 sosend函数 56 5.4 小结 58 第6章 T/TCP的实现:路由表 59 6.1 概述 59 6.2 ...

    TCP_IP详解卷1

    该文件共分12个压缩包,必须下载到同一个文件夹后解压才可以用哦~~ 简介: 《TCP/IP详解,卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用...

    TCPIP详解卷[1].part04

    该文件共分12个压缩包,必须下载到同一个文件夹后解压。 简介: 《TCP/IP详解,卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence ...

    TCPIP详解卷[1].part09

    该文件共分12个压缩包,必须下载到同一个文件夹后解压。 简介: 《TCP/IP详解,卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence ...

    TCPIP详解卷[1].part05

    该文件共分12个压缩包,必须下载到同一个文件夹后解压。 简介: 《TCP/IP详解,卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence ...

    TCPIP详解卷[1].part03

    1.15 应用编程接口 12 1.16 测试网络 13 1.17 小结 13 第2章 链路层 15 2.1 引言 15 2.2 以太网和IEEE 802封装 15 2.3 尾部封装 17 2.4 SLIP:串行线路IP 17 2.5 压缩的SLIP 18 2.6 PPP:点对点协议 18 2.7 环回接口...

    TCPIP详解卷[1].part06

    该文件共分12个压缩包,必须下载到同一个文件夹后解压。 简介: 《TCP/IP详解,卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence ...

    TCP/IP详解part_2

    该文件共分12个压缩包,必须下载到同一个文件夹后解压。 简介: 《TCP/IP详解,卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence ...

    TCPIP详解卷[1].part08

    该文件共分12个压缩包,必须下载到同一个文件夹后解压。 简介: 《TCP/IP详解,卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence ...

    TCPIP详解卷[1].part11

    该文件共分12个压缩包,必须下载到同一个文件夹后解压。 简介: 《TCP/IP详解,卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence ...

    TCPIP详解卷[1].part12

    该文件共分12个压缩包,必须下载到同一个文件夹后解压。 简介: 《TCP/IP详解,卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence ...

    TCPIP详解卷[1].part07

    1.15 应用编程接口 12 1.16 测试网络 13 1.17 小结 13 第2章 链路层 15 2.1 引言 15 2.2 以太网和IEEE 802封装 15 2.3 尾部封装 17 2.4 SLIP:串行线路IP 17 2.5 压缩的SLIP 18 2.6 PPP:点对点协议 18 2.7 环回接口...

    TCPIP详解卷[1].part10

    1.15 应用编程接口 12 1.16 测试网络 13 1.17 小结 13 第2章 链路层 15 2.1 引言 15 2.2 以太网和IEEE 802封装 15 2.3 尾部封装 17 2.4 SLIP:串行线路IP 17 2.5 压缩的SLIP 18 2.6 PPP:点对点协议 18 2.7 环回接口...

Global site tag (gtag.js) - Google Analytics