文件空洞的特点

文件空洞的特点,第1张

用ls查看的文件大小是将空洞算在内的。

cp命令拷贝的文件,空洞部分不拷贝,所以生成的同样文件占用磁盘空间小

用read读取空洞部分读出的数据是0,所以如果用read和write拷贝一个有空洞的文件,那么最终得到的文件没有了空洞,空洞部分都被0给填充了,文件占用的磁盘空间就大了。不源带过文件大小不变。

空洞文件作用很大,例如迅雷下载文件,在未下载完成时就已经占据了全部文件大小的空间,这时候就是空洞文件。下载时如果没有空洞文件,多线程下载时文件就都只能从一个地方写入,这就不是多线程了。如果有了空洞文件,可以从敏谨不同的地址写入雹拿芦,就完成了多线程的优势任务

以上几猛誉个方法执行的效此郑果都如下:

读取的text文件如下:

空洞文件即是里面内容都是空字符的文件,主要用来占位置,实现如下:

生成的文件如下:

用森知颂vim打开是这样的

函数名:

lseek

能:

移动文件读/写指针

法:

long

lseek(int

handle,

long

offset,

int

fromwhere)

所有打开的文件都有一个当前文件偏移量(current

file

offset),以下简称为

cfo。cfo

通常是一个非负整数,用于表滑好迟明文件开始处到文件当前位置的字节数。读写 *** 作通常开始于

cfo,并且使

cfo

增大,增量为读写的字节数。文件被打开时,cfo

会被初始化为

0,除非使用了

O_APPEND

使用

lseek

函数可以改变文件的

cfo

lseek

的以下用法返回当前的偏移量:

off_t

currpos

currpos

=

lseek(fd,

0,

SEEK_CUR)

这个技巧也可用于判断我们是否可以改变某个文件的偏移量。如果参数

fd(文件描述符)指定的是

pipe(管道)、FIFO

或者

socket,lseek

返回

-1

并且置

errno

ESPIPE。袜枯

对于普通文件(regular

file),cfo

是一个非负整数。但对于特殊设备,cfo

有可能是负数。因此,我们不能简单地测试

lseek

的返回值是否小于

0

来判断

lseek

成功与否,而应该测试

lseek

的返回值是否等于

-1

来判断

lseek

成功与否。

lseek

仅将

cfo

保存于内核中,不会导致任何

I/O

*** 作。这个

cfo

将被用于之后的读写 *** 作。

如果

offset

比文件的当前长度更大,下一个写 *** 作就会把文件“撑大(extend)”。这就是所谓的在文件里创造“空洞(hole)”。没有被实际写入文件的所有字节由重复的

0

表示。空洞是否占用硬盘空间是由文件系统(file

system)决定的。

编辑本段

程序例

#include

#include

#include

#include

#include

#include

int

main(void)

{

int

handle

char

msg[]

=

"This

is

a

test"

char

ch

/*

create

a

file

*/

handle

=

open("TEST.$$$",

O_CREAT

|

O_RDWR,

S_IREAD

|

S_IWRITE)

/*

write

some

data

to

the

file

*/

write(handle,

msg,

strlen(msg))

/*

seek

to

the

begining

of

the

file

*/

lseek(handle,

0L,

SEEK_SET)

/*

reads

chars

from

the

file

until

we

hit

EOF

*/

do

{

read(handle,

&ch,

1)

printf("%c",

ch)

}

while

(!eof(handle))

close(handle)

return

0

}

追问:

如果

offset

比文件的当前长度更大,下一个写 *** 作就会把文件“撑大(extend)”。这就是所谓的在文件里创信李造“空洞(hole)”。没有被实际写入文件的所有字节由重复的

0

表示。空洞是否占用硬盘空间是由文件系统(file

system)决定的。

还是没有回答返回值啊

追答:

返回值为0

空洞都被0填充


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12300559.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存