1. 程式人生 > 其它 >檔案操作(偏移量)

檔案操作(偏移量)

通過函式lseek可以改變檔案當前的讀寫位置。

函式原型:

       #include <sys/types.h>
        #include <unistd.h>
       off_t lseek(int fd, off_t offset, int whence);

引數屬性:

  offset:表示從檔案的whence位置開始偏移的位置大小。

  whence:表示檔案偏移的位置

    有三個選項:

    SEEK_SET:表示從檔案開始位置偏移

    SEEK_CUR:表示從檔案當前的讀寫位置偏移

    SEEK_END:表示從檔案的結束位置偏移

seek.c

int main()  
{  
 //開啟檔案 
 int fd = open("b.bat",O_CREAT|O_RDWR);  
 if(fd == -1)  
        perror("錯誤:"),exit(-1);  
 
 //準備資料 
 char *str = "abcdefghigklmn";  
 //寫入資料 
    write(fd,str,strlen(str));  
 //準備空間 
 char buf[32] = {0};  
 
 //將檔案的讀寫位置移動到檔案的開始 
    lseek(fd,0,SEEK_SET);  
 //讀取5個位元組的資料 
    read(fd,buf,5);  
 //輸出 
    puts(buf);  
 
 //關閉檔案 
    close(fd);  
}  

檔案偏移量的移動時機:

   1、lseek主動移動偏移量

   2、read會移動偏移量

   3、write會移動偏移量

程序 --》執行--》程序在記憶體中存在一個程序表項檔案表)                         //檔案表在核心管理的記憶體空間中

檔案最開始執行時,有三個“檔案描述符”已經開啟:0,1,2

當使用open函式開啟一個檔案的時候,系統就會建立一個檔案表

檔案表的內容:

   1、檔案狀態標誌:O_RDONLY O_WRONLY...

   2、檔案偏移量(剛開啟的檔案偏移量為0)

   3、V節點指標:指向“v節點表”                                                                   //V節點表(磁碟的檔案系統上):V節點資訊、I節點資訊、檔案大小