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>

Atcloud:全场8折优惠,美国/加拿大/英国/法国/德国/新加坡vps,500g大硬盘/2T流量/480G高防vps,$4/月

atcloud怎么样?atcloud刚刚发布了最新的8折优惠码,该商家主要提供常规cloud(VPS)和storage(大硬盘存储)系列VPS,其数据中心分布在美国(俄勒冈、弗吉尼亚)、加拿大、英国、法国、德国、新加坡,所有VPS默认提供480Gbps的超高DDoS防御。Atcloud高防VPS。atcloud.net,2020年成立,主要提供基于KVM虚拟架构的VPS、只能DNS解析、域名、SS...

日本CN2独立物理服务器 E3 1230 16G 20M 500元/月 提速啦

提速啦的来历提速啦是 网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑 由赣州王成璟网络科技有限公司旗下赣州提速啦网络科技有限公司运营 投资1000万人民币 在美国Cera 香港CTG 香港Cera 国内 杭州 宿迁 浙江 赣州 南昌 大连 辽宁 扬州 等地区建立数据中心 正规持有IDC ISP CDN 云牌照 公司。公司购买产品支持3天内退款 超过3天步退款政策。提速啦的市场定位提速啦主...

宝塔面板企业版和专业版618年中活动 永久授权仅1888元+

我们一般的站长或者企业服务器配置WEB环境会用到免费版本的宝塔面板。但是如果我们需要较多的付费插件扩展,或者是有需要企业功能应用的,短期来说我们可能选择按件按月付费的比较好,但是如果我们长期使用的话,有些网友认为选择宝塔面板企业版或者专业版是比较划算的。这样在年中大促618的时候,我们也可以看到宝塔面板也有发布促销活动。企业版年付899元,专业版永久授权1888元起步。对于有需要的网友来说,还是值...

lseek为你推荐
bloomfilter布隆过滤器既然有错误率,为什么还能应用在key-value系统中?郭凡生慧聪网公司怎么样bindservice如何启动和停止用serviceradius认证PPPoE有认证的功能,RADIUS也有验证功能,两者有区别么??faq是什么意思在国际贸易中“FAQ”代表的是什么意思问卷星登陆你好,如果之前用微信登录了问卷星小程序,以后每次回答都不需要微信登录了吗?回答了会被知道个人信息吗暴力破解密码用什么方法才能破解别人密码pci数据捕获和信号处理控制器三星450r5v x05 设备管理器出现pci数据捕获和信号处理控制器有个黄色的感叹号怎么办pps网络电视pps网络电视在线观看?sungard李庆星老板咋样 我准备去CDMC上海决策者经济顾问公司上班了
网站域名备案查询 google镜像 wordpress技巧 suspended 双12活动 火车票抢票攻略 灵动鬼影 ca4249 e蜗 新天域互联 空间论坛 phpmyadmin配置 云营销系统 学生服务器 godaddy空间 深圳主机托管 美国主机 zencart安装 hosts文件 电信测速器在线测网速 更多