You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于lseek()设置偏移量超文件开头及SEEK_END参数的疑问

lseek() 相关问题解答

1. 将偏移量设置到文件开头之前的行为

当尝试把文件偏移量设置到文件开头之前(最终偏移量小于0)时,lseek()会直接返回-1,同时将errno设为EINVAL(非法参数错误),该操作不会生效。

2. 当前偏移量为5时调用lseek(fd, 10, SEEK_END)的结果

lseek()的SEEK_END基准是当前文件的实际末尾位置,和当前的文件偏移量无关。假设当前文件大小为S,调用该函数后,新的文件偏移量会被设置为S + 10,函数返回值就是这个新的偏移量数值,不会触发错误。

举个实例:如果当前文件大小是20字节,不管当前偏移量是5还是其他值,调用后偏移量会变成30,函数返回30。

3. 新文件写入5字节后调用lseek(fd, 10, SEEK_END)的结果

创建新文件并写入5字节后,文件大小为5字节,此时SEEK_END对应的位置是5。调用lseek(fd, 10, SEEK_END)会将偏移量设置为5 + 10 = 15,函数返回15,不会触发错误,也不会返回0。

补充:如果后续在这个偏移量位置写入数据,文件中间(5到14字节的区间)会被自动填充为0,这是Linux文件系统支持稀疏文件的特性。

内容的提问来源于stack exchange,提问作者user19605052

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 01:15:55