当前位置: 技术问答>linux和unix
文件空洞
来源: 互联网 发布时间:2016-05-20
本文导语: 在Unix系统上,如果打开一个文件后,使用lseek使得文件的偏移量超过文件的结尾,再写入一些东西,那么在文件中就会产生空洞。read函数读取文件时,空洞部分被读作0.但是,这些0实际上不在磁盘上。使用du就可以看...
在Unix系统上,如果打开一个文件后,使用lseek使得文件的偏移量超过文件的结尾,再写入一些东西,那么在文件中就会产生空洞。read函数读取文件时,空洞部分被读作0.但是,这些0实际上不在磁盘上。使用du就可以看出来
问题是,如果我想写一个程序,拷贝一个文件,但是要把其中的空洞部分去掉,怎么办?(apue上的一道题目,没思路)
问题是,如果我想写一个程序,拷贝一个文件,但是要把其中的空洞部分去掉,怎么办?(apue上的一道题目,没思路)
|
1. 文件是可以有空洞的,空洞不占用磁盘空间,但是我们用ls查看的文件大小是将空洞算在内的。
2. cp命令拷贝的文件,空洞部分不拷贝,所以生成的文件同样占用磁盘空间小
3. 用read读取空洞部分读出的数据是0,所以如果用read和write拷贝一个有空洞的文件,那么最终得到的文件没有了空洞,空洞部分都被0给填充了,文件占用的磁盘空间就大了。不过文件大小不变。
2. cp命令拷贝的文件,空洞部分不拷贝,所以生成的文件同样占用磁盘空间小
3. 用read读取空洞部分读出的数据是0,所以如果用read和write拷贝一个有空洞的文件,那么最终得到的文件没有了空洞,空洞部分都被0给填充了,文件占用的磁盘空间就大了。不过文件大小不变。