當閱讀K & R時,我開始對如何確定文件位置感興趣。按照文件位置,我指的是流正在讀取或寫入的文件的位置。我認爲它必須與文件指針或它指向的數據有關。所以,我檢查堆棧溢出,並找到以下答案:文件指針會隨着文件位置的變化而移動嗎?
Does fread move the file pointer?
答案表明,文件指針會隨着文件位置的改變而改變。這讓我非常困惑,因爲在我的理解中,某個文件的文件指針應該始終指向相同的地址,這裏存儲着關於這個文件的信息。所以我寫了一小段代碼,試圖找到答案:
#include<stdio.h>
int main(void)
{
char s[1000];
FILE *fp,*fp1,*fp2;
fp = fopen("input","r");
fp1 = fp; /* File poiter before fread */
fread(s,sizeof(char),100,fp);
fp2 = fp; /* File pointer after fread */
printf("%d\n",(fp1 == fp2) ? 1 : -1);
}
它給人的輸出1,我相信指示文件指針居然不動,並仍然指向相同的地址。我也改變了fread行爲fseek,它給出了相同的輸出。那麼文件指針會隨着文件位置的變化而移動,或者我在驗證過程中錯在哪裏?
謝謝!
Nooo ....當然你明白,文件系統需要的不僅僅是一些指針,它可以控制對文件的訪問! FILE *'文件指針'通常是文件控制塊的基地址 - 關於該文件的整個元數據結構。 –
你似乎混淆了'文件* fp',它指向(在fopen()調用之後)'文件描述符'控制塊到'文件描述符'控制塊內的數據,指示當前設備,柱面, (一般情況下)硬盤上的磁道,扇區等。 – user3629249