其他分享
首页 > 其他分享> > lseek的问题:Fri, Dec 18th, 2020

lseek的问题:Fri, Dec 18th, 2020

作者:互联网

在做轮子的过程中,遇到了一个 lseek 的函数,纠结于:第一:何为 lseek ?第二:是不是标准库,是 C 还是 C++ 的?第三:既然我们需要用 C++ ,就应该用 C++ standard lib,有无替代品能不让 C++C 混在一起?

什么是空洞文件?

空洞文件是 UNIX 操作系统的一个概念,就是文件指针的偏移量可以大过这个文件本身,于是乎产生了空洞,目的是为了让多线程同时写这个文件(因为文件中可以制造很多空洞)空洞是否占用空间,取决于上层的文件系统如何写。

lseek是什么?

所有打开的文件都有一个当前文件偏移量(current file offset),以下简称为 cfo。cfo 通常是一个非负整数,用于表明文件开始处到文件当前位置的字节数。读写操作通常开始于 cfo,并且使 cfo 增大,增量为读写的字节数。文件被打开时,cfo 会被初始化为 0,除非使用了 O_APPEND

unistd.h 是 C 和 C++ 程序设计语言中提供对 POSIX 操作系统 API 的访问功能的头文件的名称。是Unix Standard的缩写。该头文件由 POSIX.1 标准(单一UNIX规范的基础)提出,故所有遵循该标准的操作系统和编译器均应提供该头文件(如 Unix 的所有官方版本,包括 Mac OS X、Linux 等)。对于类 Unix 系统,unistd.h 中所定义的接口通常都是大量针对系统调用的封装(英语:wrapper functions),如 fork、pipe 以及各种 I/O 原语(read、write、close 等等)。
类似于 Cygwin 和 MinGW 的 Unix 兼容层也提供相应版本的 unistd.h。

由于本人正在翻译别人写的一个代码,他用了lseek,而我不想用,但是我总得知道lseek怎么用吧。。那么lseek如何用呢?

  1. 如果 whence 是 SEEK_SET,文件偏移量将被设置为 offset。
  2. 如果 whence 是 SEEK_CUR,文件偏移量将被设置为 cfo 加上 offset,offset 可以为正也可以为负
  3. 如果 whence 是 SEEK_END,文件偏移量将被设置为文件长度加上 offset,
    offset 可以为正也可以为负

说了这么多,我并不想用lseek,那么有漂亮的解决办法么????


what is seekg?

  1. istream &seekg(streamoff offset,seek_dir origin);

  2. ostream &seekp(streamoff offset,seek_dir origin);

来源:https://blog.csdn.net/mafuli007/article/details/7314917

标签:lseek,文件,Fri,C++,18th,偏移量,offset,seekg
来源: https://www.cnblogs.com/sjl473/p/14223166.html