lseek函数与文件空洞】的更多相关文章

在UNIX/LINUX系统中,文件位移量可以大于文件的当前长度,这种情况下向文件中写入数据就会产生文件空洞(hole),这些没写入数据的文件空洞部分默认会被0填满.虽然这些文件空洞并没有实际的数据,但是它们仍然占据硬盘空间. 在Windows下同样支持这种文件空洞,以下简单的代码产生一个6KB的空洞文件: #include <afx.h> #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* ar…
转载:http://blog.csdn.net/a_ran/article/details/43562429 int truncate(const char *path, off_t length); int ftruncate(int fd, off_t length); 将文件大小改变为参数length指定的大小,如果原来的文件大小比参数length大,则超过的部分会被删除,如果原来的文件大小比参数length小,则文件将被扩展, 与lseek系统调用类似,文件的扩展部分将以0填充.如果文件…
所有打开的文件都有一个当前文件偏移量(current file offset),以下简称为 cfo.cfo 通常是一个非负整数,用于表明文件开始处到文件当前位置的字节数.读写操作通常开始于 cfo,并且使 cfo 增大,增量为读写的字节数.文件被打开时,cfo 会被初始化为 0,除非使用了O_APPEND . 使用 lseek 函数可以改变文件的 cfo . #include <unistd.h> #include <sys/types.h> off_t lseek(int fil…
1.read函数 调用read函数从文件去读数据,函数定义如下: #include <unistd.h> ssize_t read(int filedes, void* buff, size_t nbytes); 成功则返回实际读取的byte数,如果已经达到文件结尾则返回0,出错则返回-1. 2.write函数 调用write函数向打开的文件写入数据,函数定义如下: #include <unistd.h> ssize_t write(int filedes, void* buff,…
对于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…
read函数(读取文件) read函数可以读取文件.读取文件指从某一个已打开地文件中,读取一定数量地字符,然后将这些读取的字符放入某一个预存的缓冲区内,供以后使用. 使用格式如下: number = read(handle, buffer ,n) : 上述read调用函数中,各个参数的定义如下: handle: 这是一个已经打开的文件句柄,表示从这个文件句柄所代表的文件读取数据. buffer: 指缓冲区,即读取的数据会被放到这个缓冲区中去. n: 表示调用一次read操作,应该读多少数量的字符…
如果程序的文件偏移量已然跨越了文件结尾,然后再执行IO操作,将会发生什么情况? read调用将会返回0,表示文件结尾.令人惊讶的是,write函数可以在文件结尾后的任意位置写入数据. 从文件结尾后到新写入数据的这段空间被称为文件空洞. 从编程的角度来看,文件空洞是存在字节的,读取空洞将返回以0(空字节)填充的缓冲区. 然而,文件空洞不占用任何磁盘空间.知道后续某个时间点,在文件空洞中写入了数据,文件系统才会为之分配磁盘块. 文件空洞的优势在于,与为实际需要的空字节分配磁盘块相比,稀疏的填充文件会…
前言 本文介绍使用无缓冲IO函数进行文件读写. 所谓的无缓冲是指该IO函数通过调用系统调用实现,其实系统调用内部的读写实现也是使用了缓冲技术的. 读写步骤 1. 打开文件 open 函数 2. 读写文件 read write 函数 3. 修改文件指针 lseek 函数 ( 可能和 2 交替进行 ) 4. 关闭文件 close 函数 代码示例 // // 本程序往一个文件中写入一个整型数组 // 然后读取这个数组并输出 // #include <unistd.h> #include <fc…
前言 本文介绍使用无缓冲IO函数进行文件读写. 所谓的无缓冲是指该IO函数通过调用系统调用实现,其实系统调用内部的读写实现也是使用了缓冲技术的. 读写步骤 1. 打开文件 open 函数 2. 读写文件 read write 函数 3. ( 如果需要 )修改文件指针 lseek 函数 ( 可能和 2 交替进行 ) 4. 关闭文件 close 函数 代码示例 // // 本程序往一个文件中写入一个整型数组 // 然后读取这个数组并输出 // #include <unistd.h> #includ…
转载自:http://blog.csdn.net/wide288/article/details/21622183 zend studio中ctrl+鼠标左键无法转到类或函数定义文件的解决方法: zendstudio 时常 无法ctrl+左键 跳转 到函数源 代码 是创建工程的方式造成的,很有可能是把先前存在的工程以file的形式导入, zendstudio 就把工程当作文档来处理了.解决的办法是: 右键点击工程->configure->add php support 然后系统会自动rebui…