linux 空洞文件 追加数据,注意空洞文件的自动添0操作

博客讲述了在Linux环境下,使用ext3文件系统时,通过pwrite和pread函数写入和读取文件,遇到文件空洞的情况。当文件存在空洞时,系统会自动用0填充,而不是保持为空。测试结果显示,即使文件中存在空洞,pread函数仍能正确读取到之前写入的数据。
摘要由CSDN通过智能技术生成

看一个简单的实例(具体的错误处理和更详细的内容没些):

int           fd;

uint8_t       buf[4096];

fd = open("/tmp/rmp/a.rmp", O_CREAT|O_BINARY|O_RDWR, 0644); /* 该文件是新建立的 */

memset(buf, 0xEF, sizeof(buf));

printf("pwrite ret: %d\n", pwrite(fd, buf, 1023, 10));

printf("pread ret: %d\n", pread(fd, buf, 20, 0));

mem_dump(buf, 20, 0);

当把20 bytes数据读出来的时候,返回结果为:

pwrite ret: 1023

pread ret: 20

T 4G M 4K   +0-+1-+2-+3-+4-+5-+6-+7-+8-+9-+A-+B-+C-+D-+E-+F  0123456789ABCDEF

00000000000 00 00 00 00 00 00 00 00-00 00 EF EF EF EF EF EF  ................

00000000010 EF EF EF EF                                      ....

原来当文件出现空洞的时候系统为根据文件的块结构适当的把空洞部分补成0, 我测试的文件系统为: ext3, 环境:

Linux localhost.localdomain 2.6.23.1-42.fc8 #1 SMP Tue Oct 30 13:55:12 EDT 2007 i686 i686 i386 GNU/Linux

今天下午就犯过这样的错误, 以为该部分内容为空呢!记住了。

阅读(1882) | 评论(0) | 转发(0) |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值