星期二, 4月 24, 2007

max file size == 2GB

一般來說,在Linux系統上,當我們要建立一個大型檔案時,檔案最大可以等於2的31次方-1,也就是大約等於2GB這麼大。會是這個size原因是因為當你在操作檔案時,系統用來管理目前檔案存取位置的off_t是一個32位元的整數。

如果要打破file size最大2GB的限制,那就要在open file時,加上O_LARGEFILE的flag,並且改用off64_t表示資料在檔案中的位移值。另外,在compile時加上-D _GNU_SOURCE,這樣就可以建造出超過2GB的檔案了。

附上一個簡單的範例供大家參考一下。此範例的目的主是要建立一個檔案大小大約3GB的檔案。


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

int main()
{
int fd;
off64_t file_size;

fd=open("test.dd",O_LARGEFILE|O_CREAT|O_RDWR,0666);
if(fd==-1)
{
perror("open");
exit(1);
}
file_size=1024;
file_size*=1024*1024*3;
if(lseek64(fd,file_size-1,SEEK_SET)==-1)
{
perror("lseek");
close(fd);
}
write(fd," ",1);
close(fd);

return 0;
}

沒有留言: