risc-v中文社区

 找回密码
 立即注册
查看: 1107|回复: 1

[求助] f_lseek函数

[复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2022-4-26 22:21:04 | 显示全部楼层 |阅读模式
#include <stdio.h>
int main() {
    int fp = open("file.txt",'wr');
    char text[]="123456";
    char text1[]="";
    int offset = 1;
    write(fp, text, 6);
    lseek(fp, offset, SEEK_SET);
    read(fp, text1, 3);
    write(fp, text1, 3);
    close(fp);
    return 0;
}


回复

使用道具 举报

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
 楼主| 发表于 2022-4-26 22:23:28 | 显示全部楼层
结果:lseek定位重新到距开头1个偏移,并读取3个字符,再写,是直接追加写的。


123456234

那么假如offset定位到了文件末尾呢?我们先把offset设置成5:


123456612

会定位到6处开始读,超过文件的范围会重新定位到文件头,然后在文件末尾追加写。
offset定位到文件尾:offset=6。

123456 12

中间会出现一个空格,我猜想应该是’\0’,然后转到文件头继续读12。

offset超过文件尾:offset=8。

123456 12

结果与定位到文件尾的是一样的,说明最多只能重定位到文件尾。

谢谢阅读!有错请指正!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-5-3 15:24 , Processed in 0.020303 second(s), 17 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表