lseek函数作用:设置文件读写位置
野火【第一期】Linux系列教学视频之“零基础入门”篇,手把手教学,从0开始,基于野火i.MX6ULL Pro/MINI开发板
第43讲 lseek和sync函数_哔哩哔哩_bilibili
函数原型:
off_t lseek(int fd, off_t offset, int whence);
参数含义:off_t offset偏移量,whence偏移量相对基准点,也就是说,最后文件的读写位置是偏移量+基准点
- 若whence是SEEK_SET,基准点为文件开头
- 若whence是SEEK_CUR,基准点为当前位置(即光标位置,,)
- 若whence是SEEK_END,基准点为文件末尾
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
int fd = open("file",O_RDWR|O_CREAT,0666);
//读写模式打开文件file,没有则创建,文件权限设置为可读可写
write(fd,"123",3);//向其中写入3个字节的字符串123(不像上节那样要写buf)
lseek(fd,100,SEEK_CUR);//让文件的读写位置往后偏移100字节
write(fd,"123",3);//往偏移后的位置处写3个字节
close(fd);
return 0;
}
打开file文件
123^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@123
可以看到确实是偏移了100字节
sync函数
用户空间的数据buff,通过页缓冲区,再写到磁盘的,等到页缓冲区满了后才会把数据写到磁盘,读也是如此,(页缓存区可以减少磁盘的读写速度,从而延长磁盘的使用寿命)
所以sync函数的作用就是把页缓冲区的数据立即写入磁盘。
使用方法是,在write()后写上sync(void);(其头文件也是#include <unistd.h>)