看一个简单的实例(具体的错误处理和更详细的内容没些):
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
今天下午就犯过这样的错误, 以为该部分内容为空呢!记住了。
阅读(2274) | 评论(0) | 转发(0) |