其实可以被概括为对文件大小的获得(逃
int len = lseek(fd, 0, SEEK_END);
SEEK_SET
The offset is set to offset bytes.
SEEK_CUR
The offset is set to its current location plus offset bytes.
SEEK_END
The offset is set to the size of the file plus offset bytes.
以上↑以下↓是manual文档中lseek的页面
lseek可以支持的参数有上面三个
- 偏移量设置偏移字节
- 偏移量设置为当前位置加偏移量字节
- 偏移量设置为文件大小和加偏移量字节
以往来说第三的参数并不知道有什么卵用(太菜了),但如果是把偏移量设置为零那加上这个参数就可以很好地返回一个文件的大小了
The lseek() function allows the file offset to be set beyond the end of the file (but this does not change the size of the file). If data is later written at this point, subsequent reads of the data in the gap (a "hole") return null bytes (aq\0aq) until data is actually written into the gap.
上面这段话的内容也很有意思,文件的偏移量是可以大于文件的当前长度的
并且在下一次io操作的时候会加长该文件,并在文件中形成一个gap或者说是hole(在apue里把这个翻译成为空洞)
空洞
这个空洞并不在磁盘上占用储存区,具体的实现以后再说(内核代码还没读完orz)
新的数据与源文件尾端的空间里就是空洞啦。而且空洞会被自动填充上\0
所以关于lseek的内容就先这样吧 继续去补apue了orz
看个mmap看了两天丢人