1. 程式人生 > >檔案程式設計-------------通過偏移指標(lseek)設定固定大小的檔案

檔案程式設計-------------通過偏移指標(lseek)設定固定大小的檔案

1、操作:通過lseek設定一個固定大小的檔案:
2、思路:建立一個檔案,偏移指標指向你想要大小的那個位置,至少理論上是行得通的,是可以開闢一個這麼大的檔案的!
這時候你需要想到的是:當你的程式執行結束的時候偏移指標隨著程式的結束而消失,而往檔案裡面寫入東西是不會隨著程式的結束而結束的,所以想到在想要大小的那個位置卡一個字母,也就是在那個位置先偏移指標指向他然後再寫入一個字母,這樣一個固定大小的檔案就設定完成了;

3、涉及的偏移指標lseek:
(1)、lseek系統呼叫可以改變檔案偏移量(File Offset),檔案偏移量是一個整數,表示距檔案起始處的位元組數。
(2)、格式:

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

其中,引數whence必需是以下三個常量之一:
SEEK_SET:將檔案偏移量設定在距檔案開始處offset個位元組。
SEEK_CUR:將檔案偏移量設定在其當前值加offset,offset可正可負。
SEEK_END:將檔案偏移量設定為檔案長度加offset,offset可正可負。
int fildes :是你需要建立的並且開啟的檔案,用檔案描述符代替。
off_t offset:表示偏移量的大小,也就是取決於你要設定的檔案大小。
我覺得從開頭開始卡距離比較方便,int whence用SEEK_SET。

4、程式碼實現:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

#define SIZE 1024

int main()
{
    int fd = open("big", O_RDWR|O_CREAT, 0777);
    if(fd == -1)
    {
        perror("open fd");
        return
-1; } // 設定一個檔案偏移指向1g處,卡住他; lseek (fd, 1024*1024*1024, SEEK_SET); char buf[SIZE] = "hello"; write(fd,buf,1); close(fd); return 0; }