簡體   English   中英

fgets 如何從文件中一行一行地讀取?

[英]How fgets reads line after line from a file?

假設我有:

#define CHUNK_SIZE 256

void copy(FILE *input, FILE *output) {
     char buffer[CHUNK_SIZE];
     while (fgets(buffer, CHUNK_SIZE, input) != NULL) {
          fputs(buffer, output);
     }
}

但是在 while 循環中, fgets獲得相同的參數 - 那么它如何知道在while每次迭代中從文件中讀取下一行? 它不會因為總是讀取同一行而陷入無限循環嗎?

編輯:添加了額外的解釋,因為@KlasLindbäck 指出我的答案並不完全正確

File 是一個結構體,其中包含一個字段“fd”,它是一個整數,用於標識此文件的 OS 文件描述符,此文件描述符可用於檢索您正在讀取的文件中的當前位置。 如果您想了解有關此處的文件結構和此處的文件描述符的更多信息

TL;DR:FILE 結構以某種方式存儲它正在讀取的位置。

打開的文件會在內部跟蹤下一個讀取操作的當前位置。 每當您從文件中讀取時,位置都會更新。 您可以使用ftell()獲取當前位置並使用fseek()設置當前位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM