[英]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.