博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
有“空洞”的文件的C代码实现
阅读量:4140 次
发布时间:2019-05-25

本文共 1039 字,大约阅读时间需要 3 分钟。

      最近看apue, 看到了空洞文件的介绍, 颇为好奇, 下面来学习一下。如果你不知道什么是空洞文件, 请去学习apue. 

      下面,我们先来做一个空洞文件:

#include 
// unix std#include
// std io#include
// file control#define FILE_MODE (S_IRUSR | S_IWUSR |S_IRGRP |S_IROTH) // 文件模式char buf1[] = "abcdefghij";char buf2[] = "ABCDEFGHIJ";int main(){ int fd = -1; if((fd = creat("file.hole", O_CREAT|O_RDWR)) < 0) { perror("creat error\n"); exit(1); } if(10 =! write(fd,buf1,10)) { perror("buf1 write error\n"); exit(1); } if(-1 == lseek(fd, 16384, SEEK_SET)) // 导致文件产生空洞 { perror("lseek error\n"); exit(1); } if(10 != write(fd,buf2,10)) { perror("write buf2 error\n"); exit(1); } close(fd); return 0;}
      gcc一下, 生成了a.out, ./a.out一下就生成了file.hole文件, 用如下两个命令:

cp file.hole file.hole1

cat file.hole > file.hole2

     然后再ls -l看一下结果, 可知: file.hole和file.hole1完全一致, 即有空洞。 而file.hole2是没有空洞的文件。   有点weird的是: 如果用beyond compare比较, file.hole1和file.hole2居然是完全相同的。 原来: beyond compare在读取有空洞的file.hole1时候, 自动将空洞补为了0, 于是误认为file.hole1和file.hole2相同。

转载地址:http://clrvi.baihongyu.com/

你可能感兴趣的文章
JM8.6代码中究竟是如何把码流写进test.264文件的?
查看>>
证明 (k - 1) * k * (k + 1) 必定能被6整除
查看>>
证明 3*k + 2 必定不是完全平方数
查看>>
若n能被3整除,证明2^n除以7的余数为1
查看>>
JM8.6配置文件中参数的解释
查看>>
分析JM8.6中的写码流函数WriteAnnexbNALU
查看>>
把十进制转成二进制的一个简单易行的方法(不需要用栈) .
查看>>
C++与C的一个小区别(变量定义的先后区别)
查看>>
H.264码流分析入门(以第一帧为例)
查看>>
JM8.6中的一个重要结构体NALU_t的定义、分配和释放
查看>>
尽信书则不如无书、尽信标准则不如无标准(也谈JM8.6代码中的手误)
查看>>
H.264中NALU、RBSP、SODB的关系 (弄清码流结构)
查看>>
简单看一看H.264中的SPS和PPS
查看>>
闲谈杂扯:什么是H.264标准?什么是H.264句法元素?
查看>>
JM8.6中NALU(此处指非VCL式的NALU,如SPS和PPS)是如何写进码流的?
查看>>
从JM8.6代码看Bitstream、DataPartition、Slice、Picture的关系及码流结构本质
查看>>
JM8.6中NALU(此处指VCL式的NALU)是如何写进码流的?
查看>>
C语言中%*[^\n]的重要用途(从JM8.6解码器中学到的)
查看>>
JM8.6编码器主要函数调用关系小结
查看>>
JM8.6编解码器中trace_enc.txt和trace_dec.txt文件的功能
查看>>