[apue] 文件中的空洞】的更多相关文章

空洞的概念 linux 上普通文件的大小与占用空间是两个概念,前者表示文件中数据的长度,后者表示数据占用的磁盘空间,通常后者大于前者,因为需要一些额外的空间用来记录文件的某些统计信息或附加信息.以及切分为块的数据信息 (通常不会占用太多).文件占用空间也可以小于文件尺寸,此时文件内部就存在空洞了. 所谓空洞其实就是没有分配存储空间的数据块,当访问这些数据块时,系统返回 0,就如同读到空文件一般,当写这些块时,系统再实地分配对应的存储空间.其实这个和内存中的虚址地址与物理地址的概念非常相似--操作…
1 题面 编写类似cp(1)的程序,它复制包含空洞的文件,但是不将字节0写到输出文件中去. 2 基本思路 首先要搞清楚空洞的性质以判断一个文件是否有空洞,以及空洞的位置 知道了空洞的位置之后,读到源文件中的空洞部分时,在目标文件中lseek相应的长度 3 创建空洞文件,同时探索空洞性质 交替lseek和write,逐渐增大间隔长度.比较文件的大小和实际占用的block数目 测试源码 #include <stdio.h> #include <fcntl.h> #include <…
lseek函数显示地为一个打开文件设置偏移量,文件偏移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将加长该文件,并在文件中构成一个空洞,这一点是允许的.位于文件中但没有写过的字节都被读为0. eg: holeFile.c函数创建了一个具有空洞的文件,运行观察: 可以看到,文件中的30个未写入字节都被设置读为0.每一行开始的一个7位数是以八进制形式表示的字节偏移量. 将刚创建的文件与同样长度但舞空洞的文件进行比较 虽然两个文件的长度相同,但无空洞文件占用了20个磁盘块,而具有空洞的文…
文件 IO 记录书中的重要知识和思考实践部分 Unix 每个文件都对应一个文件描述符(file descriptor),为一个非负整数,一个文件可以有多个fd, 后面所有与文件(设备,套接字等)有关操作都是围绕这个fd来的. 在shell中 < > 都为重定向符号,前者为重定向输入,后者为输出. 文件的打开 #include <fcntl.h> int open(const char *path, int flags, ... /* mode_t mode */); int ope…
文件操作相关 API:open, read, write, lseek, close. 多进程共享文件的相关 API:dup, dup2, fcntl, sync, fsync, ioctl. 文件操作 API open and openat 函数原型: #include <fcntl.h> int open(const char *path, int oflag, ... /* mode_t mode */ ); int openat(int fd, const char *path, in…
关于apue.3e中apue.h的使用 近来要学一遍APUE第三版,并于此开博做为记录. 先下载源文件: # url: http://http//www.apuebook.com/code3e.html curl -O http://www.apuebook.com/src.3e.tar.gz tar -zxvf src.3e.tar.gz cd apue.3e ls 从上面ls的结果看,其实完全看不明白这些目录与APUE书中代码的关系,或者有些目录可以猜测出是那一章.不过有个小技巧: ls -…
第1章 unix基础知识 1. char *strerror(int errnum) 该函数将errnum(就是errno值)映射为一个出错信息字符串,返回该字符串指针.声明在string.h文件中. 2.void perror(const char *s) 该函数基于当前的errno值,在标准出错文件中输出一条出错消息,然后返回.声明在stdio.h文件中.它首先输出由s指向的字符串,然后是一个冒号,一个空格,接着是errno值对应的出错信息,最后是一个换行符. 第2章 UNIX标准化及实现…
本来是搜pthread的相关资料,看blog发现很多linux程序员都看的一本神书<APUE>,里面有系统的两章内容专门讲pthread(不过是用c语言做的代码示例,这个不碍事,还是归到原来linux c++分类中了),决定把这本书打印出来,过一下这两章内容.这个系列后面的日志会根据APUE书中的内容来. 这篇日志说的内容与APUE没有直接关系,但是却是由APUE引发的. 背景是这样的: (1)对于我这个只在windows下用vs等IDE写过一些c程序,不知道gcc是干啥的人来说,在unix下…
前言 在上一篇文章中写了如何在MVC中配置全局路由前缀,今天给大家介绍一下如何在在 json 文件中配置依赖注入. 在以前的 ASP.NET 4+ (MVC,Web Api,Owin,SingalR等)时候,都是提供了专有的接口以供使用第三方的依赖注入组件,比如我们常用的会使用 Autofac.Untiy.String.Net 等,这些第三放依赖注入组件基本上都提供了一套配置注入或者配置生命周期的方式,除了直接配置到类里面之外,还提供了要么使用 xml 文件,要么使用 json 等,那么在新的…
一些常用的数据例如一些网站的区域信息被改变的可能性不大,一般不通过请求获取,于是我们选择存在静态文件中,例如以下Demo: 1.动态加载Json数据显示到前台 [HttpPost] public ActionResult GetData() { List<Area> areaList = new List<Area>() { new Area() { AreaID=, AreaName="福建省", Depth=, cityList=new List<Ar…