#include
#include
off_t lseek(int fd, off_t offset, int whence);
应用场景1. 文件的“读”、“写”使用同一偏移位置。
#include
#include
#include
#include
#include
int main(void)
{
int fd, n;
char msg[] = "It's a test for lseek\n";
char ch;
fd = open("lseek.txt", O_RDWR|O_CREAT, 0644);
if(fd < 0){
perror("open lseek.txt error");
exit(1);
}
write(fd, msg, strlen(msg)); //使用fd对打开的文件进行写操作,问价读写位置位于文件结尾处。
lseek(fd, 0, SEEK_SET); //修改文件读写指针位置,位于文件开头。 注释该行会怎样呢?
while((n = read(fd, &ch, 1))){
if(n < 0){
perror("read error");
exit(1);
}
write(STDOUT_FILENO, &ch, n); //将文件内容按字节读出,写出到屏幕
}
close(fd);
return 0;
}
应用场景2:使用lseek获取文件大小
#include
#include
#include
#include
#include
int main(void)
{
int fd;
fd = open("lseek.txt", O_RDWR);
if(fd < 0){
perror("open lseek.txt error");
exit(1);
}
int len = lseek(fd, 0, SEEK_END);
if(len == -1){
perror("lseek error");
exit(1);
}
printf("file size = %d\n", len);
close(fd);
return 0;
}
应用场景3:使用lseek拓展文件大小:要想使文件大小真正拓展(比较野,不建议),必须引起IO操作。(即要write入)
使用 lseek 拓展文件:write 操作才能实质性的拓展文件。单 lseek 是不能进行拓展的。
一般:write(fd, "a", 1)
#include
#include
#include
#include
#include
int main(void)
{
int fd = open("./ysy.c",O_RDWR);
if(fd == -1)
{
perror("open error");
exit(1);
}
int len = lseek(fd, 100, SEEK_END);
if(len == -1)
{
perror("lseek error");
exit(1);
}
printf("file size=%d\n",len);
int ret = write(fd,"\0",1);
printf("%d\n",ret);
close(fd);
return 0;
}
使用 truncate 函数,直接拓展文件。 int ret = truncate
#include
#include
int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length);
#include
#include
#include
#include
#include
#include
int main(void) {
int fd;
/* 打开 file1 文件 */
if (0 > (fd = open("./file1", O_RDWR))) {
perror("open error");
exit(-1);
}
/* 使用 ftruncate 将 file1 文件截断为长度 0 字节 */
if (0 > ftruncate(fd, 0)) {
perror("ftruncate error");
exit(-1);
}
/* 使用 truncate 将 file2 文件截断为长度 1024 字节 */
if (0 > truncate("./file2", 1024)) {
perror("truncate error");
exit(-1);
}
/* 关闭 file1 退出程序 */
close(fd);
exit(0);
}