C語言檔案與目錄(三)

loophome發表於2015-11-06
檔案讀寫位置的移動:每一個已開啟的檔案都有一個讀寫位置。當開啟檔案時通常讀寫位置是指向檔案開頭,若是以附加的方式開啟檔案,則讀寫位置會指向檔案末尾。read或write函式讀寫檔案時,讀寫位置會隨相應移動。可以用lseek函式在檔案內容中的位置上面移動,這樣就可以在檔案中不同的位置進行上讀寫。這個函式的使用方法如下所示。
01 off_t lseek(int fd,off_t offset ,int whence);
在引數列表中,fd表示用open函式開啟的檔案返回編號。引數offset是根據引數whence來移動讀寫位置的位移數。whence為系統定義的常量,可能有下面這些可能賦值。
SEEK_SET:引數offset即為新的讀寫位置。
SEEK_CUR:以目前的讀寫位置往後增加offset個位移量。
SEEK_END:將讀寫位置指向檔案尾後再增加offset個位移量。
當whence值為SEEK_CUR或SEEK_END時,引數offet允許負值的出現。這時表示在當前位置上向前移動若干個位元組。下面是一些常用的檔案位置移動方式。
lseek(int fd,0,SEEK_SET):將讀寫位置移到檔案開頭。
lseek(int fd,0,SEEK_END):將讀寫位置移到檔案結尾。
lseek(int fd,0,SEEK_CUR):取得當前的檔案位置。
函式呼叫成功時返回這個檔案當前的讀寫位置,即距檔案開頭多少個位元組。若有錯誤則返回-1,errno 會存放錯誤程式碼。這個函式可能產生的錯誤程式碼如下所示。
EBADF:傳入的引數不是一個已經開啟的檔案。
EINVAL:給入的whence引數不合理。
EOVERFLOW:給入的移動引數導致檔案頭指標指向了檔案頭以前,產生了溢位錯誤。
要使用這個函式,需要在程式的前面包含下面的標頭檔案。
#include<sys/types.h>
#include<unistd.h>  

int fd_file;
char file[255]="";
char file_buffer[1024];
strcat(strcpy(file,mainpath),"\\file.txt");
if((fd_file=open(file,O_RDONLY))==0)
{
	printf("%s\n",strerror(errno));
}
else
{
	read(fd_file,file_buffer,4);
	printf("%s\n",file_buffer);
	lseek(fd_file,0,SEEK_SET);
	read(fd_file,file_buffer,4);
	printf("%s\n",file_buffer);
	lseek(fd_file,-4,SEEK_CUR);
	read(fd_file,file_buffer,4);
	printf("%s\n",file_buffer);
	close(fd_file);
}


相關文章