fgets函式執行完成後,檔案指標如何移動?

飛鴻影~發表於2016-04-22

用fgets執行之後,讀取了檔案中的一行,這時檔案位置指標是自動指向檔案的下一行的開頭嗎,還是指向當前行的結尾?如果一行的字串沒讀取完會怎樣?

例項結果:

如果一行的字串沒讀取完會,下一次會接著上一次讀取;
如果讀完了,直接從下一行開頭開始。

百度百科:

從檔案結構體指標stream中讀取資料,每次讀取一行。

讀取的資料儲存在buf指向的字元陣列中,每次最多讀取bufsize-1個字元(第bufsize個字元賦` `),如果檔案中的該行,不足bufsize個字元,則讀完該行就結束。

如若該行(包括最後一個換行符)的字元數超過bufsize-1,則fgets只返回一個不完整的行,但是,緩衝區總是以NULL字元結尾,對fgets的下一次呼叫會繼續讀該行。

函式成功將返回buf,失敗或讀到檔案結尾返回NULL。因此我們不能直接通過fgets的返回值來判斷函式是否是出錯而終止的,應該藉助feof函式或者ferror函式來判斷。

<?php
$handle = @fopen("/tmp/inputfile.txt", "r");
if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 4096);
        echo $buffer;
    }
    fclose($handle);
}
?>


相關文章