您的位置:首页 > 其它

lseek() 定位一个已经打开的文件

2016-11-02 17:17 204 查看
Lseek

lseek()的作用是,设置文件内容的读写位置。

  每个打开的文件都有一个“当前文件偏移量”,是一个非负整数,用以度量从文件开始处计算的字节数。通常,读写操作都是从当前文件偏移量处开始,并使偏移量增加所读或写的字节数。默认情况下,你打开一个文件(open),除非指定O_APPEND参数,不然位移量被设为0。

使用lseek()需要包含的头文件:<sys/types.h>,<unistd.h>

函数原型:

  off_t lseek(int fd, off_t offset, int whence);

  off_t是系统头文件定义的数据类型,相当于signed int

参数:

  fd:是要操作的文件描述符

  whence:是当前位置基点。

    SEEK_SET,以文件的开头作为基准位置,新位置为偏移量的大小。

    SEEJ_CUR,以当前文件指针的位置作为基准位置,新位置为当前位置加上偏移量。

    SEEK_END,以文件的结尾为基准位置,新位置位于文件的大小加上偏移量。

  offset:偏移量,要偏移的量。可正可负(向后移、向前移);

返回值:

  成功返回相对于文件开头的偏移量。    出错返回-1

1 #include <stdio.h>
2 #include <fcnlt.h>
3 #include <sys/types.h>
4 #include <sys/stat.h>
5 #include <unity.h>
6
7 int main(int argc, char * argv[])
8 {
9     int fd;
10     char buf[100];
11     if ((fd = open(argv[1], O_RDONLY)) < 0) {
12         perror("open");
13         exit(-1);
14     }
15     read(fd, buf, 1);
16     write(STDOUT_FILENO, buf, 1);
17     lseek(fd, 2, SEEK_CUR);
18
19     read(fd, buf, 1);
20     write(STDOUT_FILENO, buf, 1);
21     lseek(fd, -1, SEEK_END);
22
23     read(fd, buf, 1);
24     write(STDOUT_FILENO, buf, 1);
25     lseek(fd, 0, SEEK_SET);
26
27     read(fd, buf, 1);
28     write(STDOUT_FILENO, buf, 1);
29     close(fd);
30     printf("\n");
31
32     return 0;
33 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐