一、lseek(2)重新定位文件的读写位置的使用

    #include <sys/types.h>
    #include <unistd.h>
    off_t lseek(int fd, off_t offset, int whence);
        功能:重新定位文件读写位置距离文件起始的偏移
        参数:
            fd:指定了具体的文件
            offset:偏移量
            whence:
                SEEK_SET:offset就是文件的偏移位置(以头为基准)
                SEEK_CUR:当前位置加上offset(以当前位置为基准)
                SEEK_END:文件的大小加上offset 文件的尾部(以尾部为基准)
        返回值:
            -1 错误 errno被设置
            正确 返回的是距离文件开始的位置

    ***************************************************************
    举例:lseek.c
        #include <stdio.h>
        #include <p_file.h>
    程序:
        int main(int argc, char *argv[]) {
            int fd;
            char buf[24]; //读取到的需要先存在一个地方
            fd = open(argv[1], O_RDONLY); //不用新建文件,所以不用写第三个参数
            if(fd == -1) {
            perror("open");
            return -1;
            }
            lseek(fd, 3,SEEK_SET); //以头为基准,向后偏移3个字节
            int r = read(fd, buf, 2);
            write(1, buf, r);//
            printf("\n");
            close(fd);
            return 0;
        }

    命令: tarena@ubuntu:~/day/day28$ a.out hello 
    结果: lo

    补充:
        tarena@ubuntu:~/day/day28$ od -tx1 -tc hello
        (文件起始位置)0000000  68  65  6c  6c  6f  0a     //ASIIC码
                      h   e   l   l   o  \n     //字符
        (文件结束位置)0000006
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐