1. 每个打开的文件都有一个与其相关的“文件位置”。 2. 文件位置通常是一个非负整数, unix_c_03.txt 用以度量从文件头开始计算的字节数。 3. 读写操作都从当前文件位置开始, 并根据所读写的字节数,增加文件位置。 4. 打开一个文件时,除非指定了O_APPEND, 否则文件位置一律被设为0。 5. lseek函数仅将文件位置记录在内核中, 并不引发任何I/O动作。 6. 在超越文件尾的文件位置写入数据, 将在文件中形成空洞。 7. 文件空洞不占用磁盘空间,但被算在文件大小内。 #include <sys/types.h> #include <unistd.h> off_t lseek ( int fd, // 文件描述符 off_t offset, // 偏移量 int whence // 起始位置 ); 成功返回当前文件位置,失败返回-1。 whence取值: SEEK_SET - 从文件头 (文件的第一个字节)。 SEEK_CUR - 从当前位置 (上一次读写的最后一个字节的下一个位置)。 SEEK_END - 从文件尾 (文件的最后一个字节的下一个位置)。 范例:seek.c #include <stdio.h> #include <string.h> #include <unistd.h> #include <fcntl.h> int main (void) { int fd = open ("seek.txt", O_RDWR | O_CREAT | O_TRUNC, 0644); if (fd == -1) { perror ("open"); return -1; } const char* text = "Hello, World !"; if (write (fd, text, strlen (text) * sizeof (text[0])) == -1) { perror ("write"); return -1; } if (lseek (fd, -7, SEEK_CUR) == -1) { perror ("lseek"); return -1; } off_t pos = lseek (fd, 0, SEEK_CUR); if (pos == -1) { perror ("lseek"); return -1; } printf ("当前文件位置:%ld\n", pos); text = "Linux"; if (write (fd, text, strlen (text) * sizeof (text[0])) == -1) { perror ("write"); return -1; } if (lseek (fd, 8, SEEK_END) == -1) { perror ("lseek"); return -1; } text = "<-这里有个洞洞!"; if (write (fd, text, strlen (text) * sizeof (text[0])) == -1) { perror ("write"); return -1; } off_t size = lseek (fd, 0, SEEK_END); if (size == -1) { perror ("lseek"); return -1; } printf ("文件大小:%ld字节\n", size); close (fd); return 0; } 思考:既然lseek系统调用相当于标C库函数fseek, 那么是否存在与标C库函数ftell相对应的系统调用? 不存在, 因为通过lseek(fd,0,SEEK_CUR)就可以获得当前文件位置。 如何获取文件的大小? 通过lseek(fd,0,SEEK_END)可以获得文件的大小。
发表评论
-
使用execvp 来调用程序传参
2015-07-08 14:52 993注意: execvp 函数会根据环境变量来查找程序 ... -
设置环境变量 使./a.out 可以用a.out运行
2015-07-08 14:47 7691. 直接在终端上 运行 export PATH=$PAT ... -
mail
2015-06-08 18:36 0<?php /** * 邮件发送 ... -
学生管理系统
2015-04-22 11:23 0#include <stdio.h> #in ... -
双向链表 数字按降序排列
2015-03-06 14:47 1390#include <stdio.h> #in ... -
20个C语言中常用宏定义总结
2015-03-02 10:41 47920个C语言中常用宏定义总结 2012-09-16 10:5 ... -
liunx下copy 指令的 实现
2015-01-04 16:25 386#include <stdio.h> #in ... -
UC 文件系统
2014-12-30 13:16 633#include <stdio.h> #in ... -
open和fopen的区别:
2014-12-30 11:19 464open和fopen的区别: 1.缓冲文件系统 缓 ... -
c自己写的一些常用的函数
2014-12-26 15:56 0size_t mystrlen(const cha ... -
Socket
2014-12-01 16:31 0一、Socket简介 Socket ... -
检查姓名的几种方法
2014-11-10 11:06 0int CheckXm(char *str){ ... -
任意语言访问PostgreSQL:C语言接口
2014-11-10 10:17 0任意语言访问PostgreSQL:C语言接口 来源: ... -
修改linux文件权限命令:chmod
2014-10-23 10:23 0修改linux文件权限命令:chmod Linu ... -
locale命令来查看linux系统的默认编码和支持的其他编码
2014-10-22 17:37 0使用locale命令来查看linux系统的默认编码和支 ... -
inux下解压命令
2014-10-22 10:30 458.tar 解包:tar xvf FileN ... -
函数返回局部变量
2014-10-21 17:54 512一般的来说, ... -
assert()函数用法总结
2014-10-16 09:53 587assert宏的原型定义在<assert ... -
ADT 之 列表 C
2014-09-26 17:08 0list.h #ifndef __LIST_H__ ... -
文件系统
2014-09-05 12:01 0一、系统调用 ------------ 应用程序 ...
相关推荐
Linux应用编程之lseek详解 1、lseek函数介绍 (1)、文件指针:当我们要对一个文件进行读写时,一定要先打开这个文件,所以我们读写的所有文件都是动态文件。动态文件在内存中的形态就是文件流的形式。 (2...
本篇主要聚焦于设备驱动开发中的面向对象思想和`lseek`函数的实现,这两部分是设备驱动编程中的关键概念。 面向对象思想在Linux设备驱动中的应用: 面向对象编程(Object-Oriented Programming, OOP)是一种程序...
Linux lseek函数是Unix-like操作系统下用于文件操作的重要函数,它允许程序重新定位文件读写指针,从而在文件中的不同位置进行读写操作。在Linux编程中,特别是在处理大文件或实现某些高级I/O功能时,lseek的使用...
在C语言中,文件操作是程序处理数据流的重要部分,`lseek()`和`fseek()`函数则是控制文件读写位置的关键工具。这两个函数都允许程序员改变文件内部的读写指针,以便在文件的不同位置进行读写操作,但它们在使用上有...
在Linux系统中,文件操作是通过系统调用来完成的,比如`open`、`write`、`read`和`lseek`等。本主题聚焦于`O_APPEND`标志和`lseek`函数在文件访问中的行为,特别是它们如何影响读写操作。 `O_APPEND`是一个在`open`...
5. **f_lseek**:改变文件读写位置,支持绝对和相对偏移量的移动。 6. **f_truncate**:截断文件至指定长度,如果长度大于当前文件大小则无效果。 7. **f_sync**:同步文件缓冲区到磁盘,确保数据安全写入。 8. *...
Table of Contents Summary of gdb . . . . . . . . ....Free software ....Free Software Needs Free Documentation ....Contributors to gdb....1 A Sample gdb Session ....2 Getting In and Out of gdb ....2.1 Invoking gdb ....
off_t lseek(int fd, off_t offset, int whence); ``` - **作用**:更改文件描述符`fd`的当前位置。`offset`表示偏移量,`whence`可为`SEEK_SET`、`SEEK_CUR`或`SEEK_END`。 ##### 7. `fsync()` - **原型**: ``...
本压缩包提供了关于文件操作的C语言源码示例,包括`file_lseek.c`和`file_wr.c`两个文件,分别涉及文件指针定位(lseek)和文件写入(write)功能。以下将详细介绍这两个知识点。 1. **文件指针定位(lseek)** 在...
本资源主要讲述 Linux 2.6.17.9 内核版本中文件 I/O 操作的实现,包括主要的数据结构、宏定义和函数流程,并分别讲述 open、create、close、read、write、lseek 系统调用。 1. 数据结构 在 Linux 2.6.17.9 内核中...
在本实验中,我们使用了多种系统调用,包括 read、write、open、create、lseek 和 close。 * read 系统调用用于从文件中读取数据。 * write 系统调用用于将数据写入文件中。 * open 系统调用用于打开文件,以便进行...
在Windows操作系统中,通常我们习惯于使用图形化界面来管理和查看文件,但对于习惯于Linux环境的用户来说,一些命令行工具如`tail`是必不可少的。`tail`命令在Linux中用于查看文件的尾部内容,它对于实时监控日志...
* LINUX/UNIX 文件系统中常用的系统调用:read(), write(), open(), creat(), close(), lseek(), stat(), link(), unlink() * 文件操作:读取文件、写入文件、创建文件、关闭文件、定位文件指针、获取文件信息、链接...
系统的核心是利用Linux的系统调用,如open、write、read和lseek,来操作文件存储的图书信息。 在设计上,系统分为几个主要的函数模块: 1. 录入函数(entry):用于录入新的图书记录。它首先通过open系统调用打开...
在这个主题中,我们将深入理解 Linux 系统调用提供的核心功能,如 `open`、`read`、`write`、`lseek` 和 `close`。 1. **open** 函数用于打开文件或者创建新文件。`open` 函数接收三个参数:文件路径、打开模式(如...
本文总结了C++面试题网络编程篇中的重要知识点,包括dup和dup2函数、lseek函数、sync、fsync和fdatasync函数、fcntl函数、exit和_exit函数、setjmp和longjmp函数、记录锁、守护进程编程规范等。 1. dup和dup2函数 ...
本文总结了 Linux 文件 IO 的相关知识点,涵盖了文件 IO 的基本概念、文件描述符、open 函数、read 函数、write 函数、lseek 函数、close 函数等。 一、文件 IO 概念 文件 IO 是计算机操作系统中最基本的输入/输出...