问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

lseek函数出现空洞的返回值是什么啊?

发布网友 发布时间:2022-06-09 22:33

我来回答

3个回答

热心网友 时间:2024-12-12 08:40

函数名:
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填充

热心网友 时间:2024-12-12 08:41

函数名:
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;
  }

热心网友 时间:2024-12-12 08:41

设置文件偏移量为绝对值成功或失败,失败则为-1
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
邯郸自驾游到青岛马壕运河遗址推荐线路 株洲自驾到青岛马壕运河遗址途径地方 梧州回青岛马壕运河遗址要几个小时 石嘴山到青岛马壕运河遗址要多少油钱 可不可以用开水敷脸 开水能不能敷脸 发动机和发电机区别?? 电音之王朴智妍MV的图片? 电音之王mv里跳舞的是谁 自己怎样开网站 怎样把一个网页设置为主页 若政府增税500亿用于投资,在边际消费倾向为0.75的情况下GDP的变动为... 如果边际消费倾向为0.8,那么增加100亿元投资将导致国民收入增加多少亿 ... 泰拉瑞亚飞翔之魂怎么获得 飞翔之魂作用详细介绍 泰拉瑞亚手机版能做飞行器翅膀之类的么,能的话怎么做 手机版泰拉瑞亚,打完肉山之后还有什么boss 泰拉瑞亚地狱红龙是什么 泰拉瑞亚火龙怎么召唤 泰拉瑞亚红龙在哪打 唱歌总是不够气,唱两首歌容易头晕没力气,咋办 唱歌时感觉气不够怎么办,一首歌都唱不完 我每次唱歌都很累,总觉得气不够用,唱多了都头蒙。都说唱歌要气往下沉... 红烧小鲍鱼怎么做好吃 唱歌时总觉得气不够,请问怎样练啊 唱歌老感觉气不够。怎么办 广西壮族自治区政务服务管理办法 光荣牌悬挂服务管理工作规定 乌鲁木齐市政务服务管理办法 沈阳市政务服务管理办法 2009年河南省公安机关户政服务管理工作规范 哈尔滨房屋安全鉴定中心的电话 文件描述符表示了进程与打开文件之间的相互作用,而打开文件对象包含了... IPC对象的介绍 韩国华城连环杀人案凶手找到了吗 怎么注册公司,吴江注册公司,中陆会计 有什么好看的韩国刑侦剧 重案师姐HIT的介绍 犯罪都市女老板谁演的 产业生命周期的重要影响 Athlon 64和Athlon64 FX有什么区别? 速龙Athlon的AMD 速龙™ 64 FX 处理器 在产业经济学中论产业生命周期和产品生命周期有何不同的特点 三视图的投影规律“三等关系”是 产业生命周期理论 AMD Athlon 64 FX 处理器是双cpu吗? CPU速龙64FX去那里能买上? Athlon64/Athlon 64 X2/Athlon64 FX/Sempron 分别是什么意思?有什么区 ... Athlon64 FX是什么意思 谁能帮我就产业生命周期的四个阶段分析一个产业 三问速龙64 4000+和FX53究竟有什么不同 请问这一系列CPU谁最好:AMD Athlon64/Sempron/Athlon64 FX/Athlon64 X...