通过lseek产生空洞文件】的更多相关文章

一.lseek()系统调用 功能说明: 通过指定相对于开始位置.当前位置或末尾位置的字节数来重定位 curp,这取决于 lseek() 函数中指定的位置 函数原型: #include <sys/types.h> #include <unistd.h> off_t lseek(int fd, off_t offset, int whence); 参数说明: fd:文件描述符 offset:偏移量,该值可正可负,负值为向前移 whence:搜索的起始位置,有三个选项: (1).SEEK…
//off_t lseek(int fd,off_t offset, int base) 偏移量 搜索的起始位置(文件头(SEEK_SET),当前指针位置(SEEK_CUR),文件尾(SEEK_END))unistd.h#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include<errno.h>#include<unistd.h>#include<stdio.h…
在文件操作过程中,lseek操作可以偏移到文件的任意位置. 在UNIX文件操作中,文件位移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将延长该文件,并在文件中构成一个空洞,这一点是允许的.位于文件中但没有写过的字节都被设为 0. 如果 offset 比文件的当前长度更大,下一个写操作就会把文件"撑大(extend)".这就是所谓的在文件里创造"空洞(hole)".没有被实际写入文件的所有字节由重复的 0 表示.空洞是否占用硬盘空间是由文件系统(file…
在UNIX/LINUX系统中,文件位移量可以大于文件的当前长度,这种情况下向文件中写入数据就会产生文件空洞(hole),这些没写入数据的文件空洞部分默认会被0填满.虽然这些文件空洞并没有实际的数据,但是它们仍然占据硬盘空间. 在Windows下同样支持这种文件空洞,以下简单的代码产生一个6KB的空洞文件: #include <afx.h> #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* ar…
对于lseek函数早在大一的C语言课上就有接触,但是几乎没有使用过,只记得是和文件偏移操作相关的 看了APUE上的示例,又使用od工具查看了内容,果然很神奇,很新鲜 figure3.2.c [c] #include "apue.h" #include <fcntl.h> char buf1[] = "abcdefghij"; char buf2[] = "ABCDEFGHIJ"; int main(void) { int fd; if…
今天继续学习文件与io,话不多说,开始进入正题: 文件的read和write系统调用: 说明:函数中出现在size_t和ssize_t是针对系统定制的数据类型:     下面以一个实现文件简单拷贝的示例(类似于cp命令,但是没cp命令强大),来对其文件的读写有个感性的认识: #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include…
Linux应用编程之lseek详解 1.lseek函数介绍 (1).文件指针:当我们要对一个文件进行读写时,一定要先打开这个文件,所以我们读写的所有文件都是动态文件.动态文件在内存中的形态就是文件流的形式. (2).文件流很长,里边有很多个字节.那我们当前正在操作的是哪一个位置呢?GUI模式下的软件用光标来标识这个当前正在操作的位置,这个是给人看的. (3).在动态文件中,我们会通过文件指针来表征这个正在操作的位置.所谓文件指针,就是我们文件管理表这个结构体里边的一个指针.所以文件指针其实是vn…
3.1.1.应用编程框架介绍 3.1.1.1.什么是应用编程 (1)整个嵌入式linux核心课程包括5个点,按照学习顺序依次是:裸机.C高级.uboot和系统移植.linux应用编程和网络编程.驱动. (2)典型的嵌入式产品就是基于嵌入式linux操作系统来工作的.典型的嵌入式产品的研发过程就是:第一步让linux系统在硬件上跑起来(系统移植工作),第二步基于linux系统来开发应用程序实现产品功能. (3)基于linux去做应用编程,其实就是通过调用linux的[系统API]来实现应用需要完成…
博客地址 : http://blog.csdn.net/shulianghan/article/details/46980271 一. 文件打开关闭操作相关函数介绍 1. open 函数 (1) open 函数简介 open 函数解析 : -- 函数定义 : #include <fcntl.h> int open(const char *path, int oflag, ...); -- 函数作用 : 打开或者创建一个文件; -- 返回值 : 打开文件成功, 返回文件描述符; 如果失败, 返回…
lseek函数显示地为一个打开文件设置偏移量,文件偏移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将加长该文件,并在文件中构成一个空洞,这一点是允许的.位于文件中但没有写过的字节都被读为0. eg: holeFile.c函数创建了一个具有空洞的文件,运行观察: 可以看到,文件中的30个未写入字节都被设置读为0.每一行开始的一个7位数是以八进制形式表示的字节偏移量. 将刚创建的文件与同样长度但舞空洞的文件进行比较 虽然两个文件的长度相同,但无空洞文件占用了20个磁盘块,而具有空洞的文…