求助一个关于lseek64的问题

dadun 2011-04-12 10:00:19
系统是64位的redhat5.3,在执行以下代码的时候,正常情况下应该是会覆盖掉第一次写入的内容,文件大小应该是4字节。但是实际执行的过程中好像lseek64好像没起作用,test被写入了2次,文件大小是8字节。

不知道是什么原因呢,请能懂的朋友帮忙看看吧,谢谢了!

#include <sys/types.h>
#include <unistd.h>

int main()
{
int hFile;
hFile = open64("testfile", O_RDWR|O_CREAT|O_APPEND|O_LARGEFILE|O_NONBLOCK,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);

char *p = "test";
write(hFile, p, 4);
lseek64(hFile, 0, SEEK_SET);
write(hFile, p, 4);

return 0;
}
...全文
509 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackyshi1 2011-08-18
  • 打赏
  • 举报
回复
呵呵,也受教了
dadun 2011-04-12
  • 打赏
  • 举报
回复
果然行了...谢谢二位...感谢!
qgw_2000 2011-04-12
  • 打赏
  • 举报
回复
去掉O_APPEND。
yong_f 2011-04-12
  • 打赏
  • 举报
回复
open参数有问题。
hFile = open64("testfile", O_RDWR|O_CREAT|O_APPEND|O_LARGEFILE|O_NONBLOCK,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
改成hFile = open64("testfile", O_RDWR|O_CREAT|O_TRUNC|O_LARGEFILE|O_NONBLOCK,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
dadun 2011-04-12
  • 打赏
  • 举报
回复
刚看了看lseek64的返回值,好像是执行成功了,但是为什么write没有从头写呢?

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧