• C语言中 lseek函数的使用规范


    一.需要导入的头文件:    

    #include <sys/types.h>    

    #include <unistd.h>

    定义函数原型:off_t lseek(int fildes, off_t offset, int whence);

    二.函数说明:


    每一个已打开的文件都有一个读写位置, 当打开文件时通常其读写位置是指向文件开头, 若是以附加的方式打开文件(如O_APPEND), 则读写位置会指向文件尾.

    当read()或write()时, 读写位置会随之增加,lseek()便是用来控制该文件的读写位置. 参数fildes 为已打开的文件描述词, 参数offset 为根据参数whence来移动读写位置的位移数.

    参数 whence 为下列其中一种:
        SEEK_SET 参数offset 即为新的读写位置.
        SEEK_CUR 以目前的读写位置往后增加offset 个位移量.
        SEEK_END 将读写位置指向文件尾后再增加offset 个位移量. 当whence 值为SEEK_CUR 或
        SEEK_END 时, 参数offet 允许负值的出现.

    下列是教特别的使用方式:
    1) 欲将读写位置移到文件开头时:lseek(int fildes, 0, SEEK_SET);
    2) 欲将读写位置移到文件尾时:lseek(int fildes, 0, SEEK_END);
    3) 想要取得目前文件位置时:lseek(int fildes, 0, SEEK_CUR);

    返回值:当调用成功时则返回目前的读写位置, 也就是距离文件开头多少个字节. 若有错误则返回-1, errno 会存放错误代码.

     

     

    列:

     最后需要注意的是:当使用write函数写入数据后,再用read函数读取数据,此时的文件指针会指向write函数的末尾,read函数无法读取正确的数据,需要使用lseek函数调节文件指针偏移量

     案列:通过读取test文件并逆向写入(一个字符一个字符)到out2.txt文件中需要配合linux+gcc运行

    #include<stdio.h>
    #include<stdlib.h>
    #include<fcntl.h>
    #include<unistd.h>
    #include<sys/types.h>
    #include<string.h>
    #define SIZE_1 200
    
    int main()
    {
    int fd,fd1;
    int len;
    int jen;
    int ln;
    char buf[SIZE_1];//读取数据的缓冲区域
    char buf1[SIZE_1];//存放反向字符
    int i=0,j=0;
    fd=open("test2.txt",O_RDWR);
    fd1=open("out2.txt",O_RDWR);
    if(fd==-1||fd1==-1)
    {
    perror("error file");
    exit(-1);
    
    }
    
    
    ln=read(fd,buf,SIZE_1);
    
    printf("ln:%d
    ",ln);
    printf("%s",buf);
    
    
    for(j=-1;j>-(ln+1);j--)
    {
    
    lseek(fd,j,SEEK_END);
    read(fd,buf1,1);
    
    write(fd1,buf1,1);
    
    }
    
    close(fd);
    close(fd1);
    return 0;
    
    }
    

      

  • 相关阅读:
    高并发计算服务器数量
    Java子线程中操作主线程Private级别数据
    Java线程并发中常见的锁--自旋锁 偏向锁
    Java锁之自旋锁详解
    Java多线程:向线程传递参数的三种方法
    TPS、并发用户数、吞吐量关系
    C/C++中near和far的区别
    qt的pos()和globalpos()(globalpos是相对于桌面的)
    如何获得 Qt窗口部件在主窗口中的位置--确定鼠标是否在某一控件上与在控件上的位置
    QComboBox实现复选功能(三种方法:嵌套QListWidget, 设置QStandardItemModel, 设置Delegate)
  • 原文地址:https://www.cnblogs.com/a986771570/p/7665959.html
Copyright © 2020-2023  润新知