1 檔案指標
檔案指標是指向乙個檔案的指標,確切的是存放了用檔案這個結構體所定義的物件的起始位址,檔案指標的移動是指在檔案之間來移動,
比如:file * fp;
fp = fopen("/programe/test.txt","a+");
fp就表示檔案指標。
問題:檔案指標能不能在檔案之間來回移動?
如果能的話,需要先釋放檔案指標嗎?
如果不能的話,是為什麼,是因為這個指標是指標常量嗎?
解答:簡單程式進行測試:
[html]view plain
copy
print?
#include <
stdio.h
>
#include <
stdlib.h
>
int main()
fprintf(fp,"hello world:demo.c");
fp = fopen("/program/getchardemo.c","a+");
if(fp == null)
fprintf(fp,"hello world:getchardemo.c");
fclose(fp);
乙個指標先後指向兩個不同的值,執行結果和程式預想的完全一致,在demo.c和getchardemo.c中的最後一行都分別輸出了相應的值。
說明在這一點上面檔案指標和普通的指標是一致的。
2 檔案位置指標
檔案位置指標是指檔案開啟之後,在檔案內部進行移動的指標。
其資料型別是 fpos_t
在msdn上面是這樣說的:
fpos_t (long integer, __int64, or structure, depending on the target platform)依據平台架構可能是long型也可能是struct型
typedef long fpos_t
typedef long long __longlong_t;
typedef __longlong_t fpos_t
經過32位linux平台上面編碼測試發現它的大小是 12個位元組。這個pos_t的結構裡面應該至少有乙個字段表示的是距離檔案起始位置的偏移量。
c library reference中定義的檔案位置指標的操作函式有以下這些:
1 獲取檔案位置指標當前的位置。
int fgetpos(file *
stream, fpos_t *
pos);
int fsetpos(file *
stream, const fpos_t *
pos);
移動檔案位置指標:
long int ftell(file *
stream);
int fseek(file *
stream, long int
offset, int
whence);
2 在函式執行過程中移動檔案位置指標:
size_t fread(void *
ptr, size_t
size, size_t
nmemb, file *
stream);
size_t fwrite(const void *
ptr, size_t
size, size_t
nmemb, file *
stream);
3long int ftell(file *
stream);獲取當前位置到檔案開頭的字元數
4void rewind(file *
stream);
檔案位置指標返回到檔案開頭
5int fgetc(file *
stream);
int fputc(int
char, file *
stream);
6char *fgets(char *
str, int
n, file *
stream);
int fputs(const char *
str, file *
stream);
fgets和fputs系列函式也在讀完當前行之後,會把檔案位置指標指向下一行的開始處。
C語言 檔案位置指標
1 計算機為每個檔案保留乙個整數,這個整數表示下一次檔案讀寫操作開始的位置 所以每次讀取檔案讀到的是不一樣的 2 這個位置一定在兩個相鄰位元組之間 3 這個整數的數值就是檔案頭到這個位置之間包含的位元組個數 4 這個整數叫做檔案的位置指標 5 每當從檔案裡讀n個位元組或檔案裡寫入n個位元組之後位置指...
043 C 檔案位置指標
include using namespace std istream 和 ostream 都提供了用於重新定位檔案位置指標的成員函式。這些成員函式包括關於 istream 的 seekg seek get 和關於 ostream 的 seekp seek put seekg 和 seekp 的引數...
檔案位置指針對read write的影響
首先明確一下,同乙個檔案在同乙個程序中可以被開啟多次,只是返回的檔案描述符不同。read write lseek都涉及到檔案指標,檔案指標是跟檔案描述符關聯在一起,跟物理檔案是分開的。每個檔案描述符都有3個指標 begin curr end。可以有兩種方法更改curr指標 每次write或read的...