lseeklinux lseek函数怎么用
lseek 时间:2021-07-04 阅读:(
)
为什么linux 系统不允许lseek对tty 装置作用
附加说明 Linux系统不允许lseek()对tty装置作用,此项动作会令lseek()返回ESPIPE。
范例 参考本函数说明mkstemp(建立唯一的临时文件) 相关函数 mktemp 表头文件 #inc...lseek函数出现空洞的返回值是什么啊?
函数名: lseek
功 能: 移动文件读/写指针
用 法: long lseek(int handle, long offset, int fromwhere);
所有打开的文件都有一个当前文件偏移量(current file offset),以下简称为 cfo。
cfo 通常是一个非负整数,用于表明文件开始处到文件当前位置的字节数。
读写操作通常开始于 cfo,并且使 cfo 增大,增量为读写的字节数。
文件被打开时,cfo 会被初始化为 0,除非使用了 O_APPEND 。
使用 lseek 函数可以改变文件的 cfo 。
lseek 的以下用法返回当前的偏移量:
off_t currpos;
currpos = lseek(fd, 0, SEEK_CUR);
这个技巧也可用于判断我们是否可以改变某个文件的偏移量。
如果参数 fd(文件描述符)指定的是 pipe(管道)、FIFO 或者 socket,lseek 返回 -1 并且置 errno 为 ESPIPE。
对于普通文件(regular file),cfo 是一个非负整数。
但对于特殊设备,cfo 有可能是负数。
因此,我们不能简单地测试 lseek 的返回值是否小于 0 来判断 lseek 成功与否,而应该测试 lseek 的返回值是否等于 -1 来判断 lseek 成功与否。
lseek 仅将 cfo 保存于内核中,不会导致任何 I/O 操作。
这个 cfo 将被用于之后的读写操作。
如果 offset 比文件的当前长度更大,下一个写操作就会把文件“撑大(extend)”。
这就是所谓的在文件里创造“空洞(hole)”。
没有被实际写入文件的所有字节由重复的 0 表示。
空洞是否占用硬盘空间是由文件系统(file system)决定的。
编辑本段
程序例
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <tl.h>
int main(void)
{
int handle;
char msg[] = "This is a test";
char ch;
/* create a file */
handle = open("TEST.$$$", O_CREAT | O_RDWR, S_IREAD | S_IWRITE);
/* write some data to the file */
write(handle, msg, strlen(msg));
/* seek to the begining of the file */
lseek(handle, 0L, SEEK_SET);
/* reads chars from the file until we hit EOF */
do
{
read(handle, &ch, 1);
printf("%c", ch);
} while (!eof(handle));
close(handle);
return 0;
}NT file system是什么意思啊
操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。
文件系统由三部分组成:与文件管理有关的软件、被管理的文件以及实施文件管理所需的数据结构。
从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件的存储并对存入的文件进行保护和检索的系统。
具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。
文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。
也指用于存储文件的磁盘或分区,或文件系统种类。
因此,可以说"我有2个文件系统"意思是他有2个分区,一个存文件,或他用 "扩展文件系统",意思是文件系统的种类。
磁盘或分区和它所包括的文件系统的不同是很重要的。
少数程序(包括最有理由的产生文件系统的程序)直接对磁盘或分区的原始扇区进行操作;这可能破坏一个存在的文件系统。
大部分程序基于文件系统进行操作,在不同种文件系统上不能工作。
一个分区或磁盘能作为文件系统使用前,需要初始化,并将记录数据结构写到磁盘上。
这个过程就叫建立文件系统。
大部分UNIX文件系统种类具有类似的通用结构,即使细节有些变化。
其中心概念是超级块superblock, i节点inode, 数据块data block,目录块directory block, 和间接块indirection block。
超级块包括文件系统的总体信息,比如大小(其准确信息依赖文件系统)。
i节点包括除了名字外的一个文件的所有信息,名字与i节点数目一起存在目录中,目录条目包括文件名和文件的i节点数目。
i节点包括几个数据块的数目,用于存储文件的数据。
i节点中只有少量数据块数的空间,如果需要更多,会动态分配指向数据块的指针空间。
这些动态分配的块是间接块;为了找到数据块,这名字指出它必须先找到间接块的号码。
UNIX文件系统通常允许在文件中产生孔(hole) (用lseek ; 请看手册), 意思是文件系统假装文件中有一个特殊的位置只有0字节,但没有为这文件的这个位置保留实际的磁盘空间(这意味着这个文件将少用一些磁盘空间)。
这对小的二进制文件经常发生,Linux共享库、一些数据库和其他一些特殊情况。
(孔由存储在间接块或i节点中的作为数据块地址的一个特殊值实现,这个特殊地址说明没有为文件的这个部分分配数据块,即,文件中有一个孔。
)
孔有一定的用处。
在笔者的系统中,一个简单的测量工具显示在200MB使用的磁盘空间中,由于孔,节约了大约4MB。
在这个系统中,程序相对较少,没有数据库文件。
linux lseek函数怎么用
Linux的lseek函数用来控制一个打开的文件的读写位置,它的函数原型如下:
off_t lseek(int fildes,off_t offset ,int whence);
参数的用法:fildes参数为一个已打开的文件描述符;参数offset为读写位置的位移数,这个位移数是根据参数whence来确定的;whence参数分为下列三种:
SEEK_SET:表示offset用来直接设置读写位置。
SEEK_CUR:表示以目前的读写位置往后增加offset个位移量。
SEEK_END:表示将读写位置指向文件尾后再增加offset个位移量。
当whence值为SEEK_CUR或SEEK_END时,参数offet允许负值出现。
当lseek调用成功时返回目前的读写位置,也就是距离文件开头多少个字节。
若有错误则返回-1,errno会存放错误代码。
下面是几个使用示例:
将读写位置移到文件开头:lseek(myfile, 0, SEEK_SET);
将读写位置移到文件尾:lseek(myfile, 0, SEEK_END);
想要取得目前文件位置:off_t cur=lseek(myfile, 0, SEEK_CUR);
注意:使用lseek函数需要包含以下头文件:
#include <sys/types.h>
#include <unistd.h>
全新PHP短网址系统URL缩短器平台,它使您可以轻松地缩短链接,根据受众群体的位置或平台来定位受众,并为缩短的链接提供分析见解。系统使用了Laravel框架编写,前后台双语言使用,可以设置多域名,还可以开设套餐等诸多功能,值得使用。链接: https://pan.baidu.com/s/1ti6XqJ22tp1ULTJw7kYHog?pwd=sarg 提取码: sarg文件解压密码 www.wn7...
HostKvm 商家我们算是比较熟悉的国内商家,商家主要还是提供以亚洲数据中心,以及直连海外线路的服务商。这次商家有新增香港和俄罗斯两个机房的高防服务器方案。默认提供30GB防御,且目前半价优惠至4.25美元起步,其他方案的VPS主机还是正常的八折优惠。我们看看优惠活动。香港和俄罗斯半价优惠:2021fall,限购100台。通用优惠码:2021 ,八折优惠全部VPS。我们看看具体的套餐。1、香港高...
昔日数据怎么样?昔日数据是一个来自国内服务器销售商,成立于2020年底,主要销售国内海外云服务器,目前有国内湖北十堰云服务器和香港hkbn云服务器 采用KVM虚拟化技术构架,湖北十堰机房10M带宽月付19元起;香港HKBN,月付12元起; 此次夏日活动全部首月5折促销,有需要的可以关注一下。点击进入:昔日数据官方网站地址昔日数据优惠码:优惠码: XR2021 全场通用(活动持续半个月 2021/7...
lseek为你推荐
oracle索引Oracle中有多少种索引类型slideshare什么是slide sandalinode智能客户端iNode 智能客户端windows7上网方法丁奇海贼王里“D”的意思是什么?数秦科技数秦科技旗下有哪些区块链项目?spawning急救!编好C++程序后(确认无误),再编译时总出现error spawning 是什么意思?是不是系统出了问题memsql如何自己实现一个关系型数据库系统论坛怎么进论坛清除电脑垃圾怎么清除电脑的垃圾啊?暴力破解密码用什么方法才能破解别人密码
网络服务器租用 免费虚拟主机申请 北京域名空间 qq空间域名 bandwagonhost 20g硬盘 网站保姆 2017年万圣节 一元域名 最好的免费空间 国外代理服务器地址 泉州移动 支持外链的相册 raid10 新加坡空间 lamp是什么意思 免费网站加速 木马检测 vi命令 招聘瓦工 更多