檔案操作(偏移量)
阿新 • • 發佈:2022-05-03
通過函式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節點資訊、檔案大小