`
luozhonghua2014
  • 浏览: 62668 次
文章分类
社区版块
存档分类
最新评论

linux c lseek (空洞文件) 分析和处理

 
阅读更多

首先测试标准输入是否可以进行lseek操作

[root@luozhonghua 03]# cat ex03-lseek-01.c

/*文件ex03-lseek-01.c,
使用lseek函数测试标准输入是否可以进行seek操作*/
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>


int main(void)
{
off_t offset = -1;


/*将标准输入文件描述符的文件偏移量设为当前值*/
offset = lseek(stdin, 0, SEEK_CUR);
if(-1 == offset){
/*设置失败,标准输入不能进行seek操作*/
printf("STDIN can't seek\n");
return -1;
}else{
/*设置成功,标准输入可以进行seek操作*/
printf("STDIN CAN seek\n");
};
return 0;

}

[root@luozhonghua 03]# ./ex03-lseek-01
STDIN can't seek


----------------------------------------------------------------------------

[root@luozhonghua 03]# cat ex03-lseek-02.c
/*文件ex03-lseek-02.c,
使用lseek函数构建空洞文件*/
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>


int main(void)
{
int fd = -1,i;
ssize_t size = -1;
off_t offset = -1;
/*存放数据的缓冲区*/
char buf1[]="01234567";
char buf2[]="ABCDEFGH";
/*文件名*/
char filename[] = "hole.txt";
int len = 8;


/*创建文件hole.txt*/
fd = open(filename,O_RDWR|O_CREAT,S_IRWXU);
if(-1 == fd){
/*创建文件失败*/
return -1;
}


/*将buf1中的数据写入到文件Hole.txt中*/
size = write(fd, buf1,len);
if(size != len){
/*写入数据失败*/
return -1;
}


/*设置文件偏移量为绝对值的32*/
offset = lseek(fd, 32, SEEK_SET);
if(-1 == offset){
/*设置失败*/
return -1;
}
/*将buf2中的数据写入到文件hole.txt中*/
size = write(fd, buf2,len);
if(size != len){
/*写入数据失败*/
return -1;
}


/*关闭文件*/
close(fd);


return 0;
}


[root@luozhonghua 03]# cat hole.txt
01234567ABCDEFGH


[root@luozhonghua 03]# od -c hole.txt #16进制工具od查看
0000000 0 1 2 3 4 5 6 7 \0 \0 \0 \0 \0 \0 \0 \0
0000020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000040 A B C D E F G H
0000050





分享到:
评论

相关推荐

    空洞文件代码

    在Linux操作系统中,...通过这种方式,我们可以利用Linux系统调用灵活地处理空洞文件,满足不同的应用场景。在实际的IT工作中,理解并掌握这些知识对于优化存储效率、进行性能测试或者开发特定的文件系统都至关重要。

    Linux应用编程之lseek详解

    这个指针不能被直接访问,Linux系统用lseek函数来访问这个文件指针。 (4)、当我们打开一个空文件时,默认情况下文件指针指向文件流的开始。所以这时候去写write时写入的就是从文件开头开始的。write和read函数...

    linux C语言参考手册,供开发使用

    Linux C语言参考手册会详细介绍标准C库中的函数,如数学函数(如sqrt、pow)、字符串处理函数(如strcpy、strlen)、内存管理函数(如malloc、free)等,这些函数极大地简化了编程任务。 5. **文件I/O操作** 在...

    Linux lseek函数的使用详解

    Linux lseek函数是Unix-like操作系统下用于文件操作的重要函数,它允许程序重新定位文件读写...在编写涉及文件操作的C语言程序时,lseek是一个不可或缺的函数,尤其是在处理大文件或需要精确控制文件读写位置的场景下。

    linux设备驱动归纳总结(三):3.设备驱动面向对象思想和lseek的实现

    `lseek`函数在Linux系统中用于改变文件指针的位置,它是文件操作的一部分,尤其在处理随机访问设备时非常关键。`lseek`函数的原型如下: ```c loff_t lseek(struct file *file, loff_t offset, int origin); ``` ...

    linux文件操作 linux操作系统 文件操作 常用命令

    总的来说,Linux中的文件操作是一个深度丰富的主题,涵盖了从基础的文件打开、读写到更复杂的文件控制和系统调用的方方面面。理解和熟练掌握这些概念和函数对于任何Linux开发者来说都是至关重要的。

    linux 下的c语言

    例如,你可以使用open(), read(), write(), lseek()等函数进行文件操作,mkdir(), rmdir(), chdir()等函数处理目录。 对于进阶学习,理解预处理器、内存管理(堆栈和堆)、指针的深入使用以及并发编程(如线程和...

    linux下查看文件

    由于Linux主要使用命令行界面,因此,很多文件查看操作都是通过shell脚本和C语言编写的程序来实现的。本主题将深入探讨如何在Linux环境下利用C语言编写程序来查看文件内容。 首先,我们需要了解Linux中的文件系统和...

    linux文件操作系统

    【Linux 文件操作系统】是Linux操作系统中的核心组成部分,它负责管理和控制系统的文件系统,提供对...同时,这个过程也帮助他们了解了Linux内核如何处理文件系统请求,为未来进行更复杂的系统级编程打下了坚实基础。

    基于C语言的Linux文件管理系统.zip

    3. 权限控制模块:处理文件和目录的权限设置、权限检查等。 4. 链接管理模块:处理硬链接和符号链接的创建、读取和删除。 5. 文件系统信息模块:获取文件系统的信息,如总空间、已用空间、剩余空间等。 此外,还...

    Linux下C语言编程教程

    ### Linux下C语言编程教程知识点概览 #### 第一章 基础知识 ...以上是对给定文件标题、描述和部分内容的详细知识点概览,涵盖了从基础知识到高级主题的广泛内容,旨在帮助读者全面掌握Linux环境下的C语言编程技能。

    实验四-Linux下的C语言编程.doc

    Linux 下的 C 语言编程实验四 ...通过本实验,我们掌握了 LINUX/UNIX 文件系统中常用的系统调用和文件操作,了解了 C 语言编程在 LINUX/UNIX 环境下的应用,提高了对 LINUX/UNIX 操作系统的理解和应用能力。

    linux文件IO编程ppt

    在Linux系统中,文件I/O(Input/Output)编程是开发者必须掌握的重要技能之一,尤其对于系统级编程和驱动开发人员来说更为关键。本讲座主要围绕"Linux文件IO编程"展开,由知名的教育机构华清远见出品,质量可靠,...

    linux 文件I/O编程

    在Linux系统中,文件I/O(输入/输出)编程是操作系统与应用程序交互的重要部分,它涉及到数据在程序和磁盘之间的传输。以下是对标题和描述中提到的知识点的详细解释: 1. **open()**: `open`函数是用于打开一个文件...

    linux c语言编程基础

    在IT领域,Linux和C语言是两个至关重要的概念,它们结合在一起构成了强大的开发环境和工具。本主题将深入探讨“Linux C语言编程基础”,旨在帮助初学者理解和掌握这两个领域的基本知识。 C语言是一种高效的、通用的...

    Linux文件IO操作例程

    通过上述的Linux文件I/O例程,你可以学习如何高效地处理文件,实现文件读写、创建、删除等操作。实际项目中,结合良好的错误处理和资源管理,能够构建可靠的文件系统交互代码。在压缩包中的示例程序将进一步帮助你...

    嵌入式Linux应用程序开发详解文件IO编程_linux_源码

    14. **文件系统**:理解Linux下的VFS(虚拟文件系统)概念,如何挂载和卸载文件系统,以及文件系统的类型如EXT3、EXT4、FAT32等。 15. **设备文件**:设备文件在/dev目录下,分为字符设备(c节点)和块设备(b节点...

    嵌入式Linux文件IO及目录编程

    Linux C文件及目录管理提供了丰富的API来创建、打开、读取、写入、关闭以及删除文件和目录,例如标准C库函数fopen、fclose、fread、fwrite、fseek、ftell等,以及POSIX标准的open、read、write、lseek、close等系统...

Global site tag (gtag.js) - Google Analytics