zoukankan      html  css  js  c++  java
  • lseek使用说明

    lseek使用说明

    表头文件
    #include<sys/types.h>
    #include<unistd.h>


    定义函数
    off_t lseek(int filde,off_t offset ,int whence);

     

    EEK_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 会存放错误代码。
    可能设置erron的错误代码:
    EBADF: fildes不是一个打开的文件描述符。
    ESPIPE:文件描述符被分配到一个管道、套接字或FIFO。
    EINVAL:whence取值不当。

    #define BUFFER_SIZE 1024
    int main(int argc,char **argv)  
    {  
        int  readfd, writefd;  
        long filelen=0;  
        int  ret=1;  
        char buffer[BUFFER_SIZE];  
        char *ptr;  
      
        /*打开源文件*/   
        if((readfd=open("test.txt", O_RDONLY|O_CREAT)) == -1)   
        {   
            printf("Open Error
    ");   
            exit(1);   
        }   
       
          /*创建目的文件*/   
        if((writefd=open("dest.txt", O_WRONLY|O_CREAT)) == -1)   
        {   
            printf("Open Error
    ");   
            exit(1);   
        }   
        
        /*测得文件大小*/  
        filelen= lseek(readfd,0L,SEEK_END);  
        lseek(readfd,0L,SEEK_SET);  
        printf("read file size is %d
    ",filelen);  
        
        /*进行文件拷贝*/  
        while(ret)   
        {   
            ret= read(readfd, buffer, BUFFER_SIZE);  
            if(ret==-1)  
            {  
                printf("read Error
    ");   
                exit(1);          
            }  
            write(writefd, buffer, ret);  
            filelen-=ret;  
            bzero(buffer,BUFFER_SIZE);  
        }   
     
        close(readfd);   
        close(writefd);   
        exit(0);   
    }
  • 相关阅读:
    正则表达式
    HashTable与HashMap的区别
    求解连续子数组乘积的最大值
    求解N个值中最大的k个数,N远大于k
    C++权限修饰符
    DBSCAN算法
    【leetcode】1318. Minimum Flips to Make a OR b Equal to c
     【leetcode】1317. Convert Integer to the Sum of Two No-Zero Integers
    【leetcode】1316. Distinct Echo Substrings
    【leetcode】1315. Sum of Nodes with Even-Valued Grandparent
  • 原文地址:https://www.cnblogs.com/lesroad/p/9831529.html
Copyright © 2011-2022 走看看