簡體   English   中英

fscanf()和fgets()這樣的函數如何記住文件中的哪些內容開始讀取?

[英]How do functions like fscanf() and fgets() remember where in the file to start reading from?

例如,當使用fscanf()讀取文件時,它似乎記住它最后一次終止的位置,而不是再次從文件的開頭開始。 有人可以詳細說明這是如何工作的嗎? 我發現很難使用這些功能,因為我不理解這個組件。

FILE *參數指向緩沖區和文件句柄(請參閱fileno()函數)。

實際在文件結構中的內核中記住的位置。

有一個圖例, FILE *指針指向文件。 這不是字面意義,但對於初級程序員的解釋可能也是如此。

實際上發生的事情如下:每個進程在struct file內核中都有一個數組(這種類型沒有在用戶空間中定義,因此不要去查找它),其中包含所有打開的文件。 一個句柄由open()系統調用返回,它只是數組的索引。 函數fileno()fopen()返回的FILE *指針中檢索句柄,可以直接操作。 除了訪問ioctl()fctl()之外,這通常是一個壞主意,因為您最終將與FILE對象中的內部緩沖區進行戰斗。

struct file一個成員是loff_t f_pos ,它是內核read()write()停止的確切位置(以字節為單位write() 這是在FILE中緩沖的,它知道它前面讀取的字節數或后續寫入的字節數。

暫無
暫無

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

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