1. 程式人生 > >問題22:如何設置文件的緩沖

問題22:如何設置文件的緩沖

自身 系統調用 緩沖區 進行 tty 寫入 需要 大小為n 每次

一、什麽是文件的緩沖?

1、說明

  將文件內容寫入到硬件設備時,比如磁盤的扇區,則需要進行系統調用,這類I/O操作的耗時很長,為了減少I/O操作的次數,文件通常使用緩沖區(當需要寫入的字節數不足一個塊時,將數據放入緩沖區,當數據湊夠一個塊的大小後才進行系統調用);

2、文件的緩沖行為:

  A、全緩沖:只有當數據湊夠一個塊時,才進行系統調用(即I/O操作);

  B、行緩沖:碰到一個換行符,就進行一次系統調用;(多用於tty設備,也就是終端設備,如shell)

  C、無緩沖:不進行緩沖,需要及時的將數據發送到接口;(比如串口設備)

3、備註

  1. 系統調用:向操作系統申請一個服務,操作系統響應後,幫助調用硬件的驅動程序,這種操作稱為I/O操作;
  2. 磁盤扇區:硬盤的內部圓形金屬盤片被磁道劃分成若幹個扇形區域,這就是硬盤扇區。若幹個扇區就組成整個盤片,硬盤的讀寫以扇區為基本單位。
  3. 對於磁盤這類的塊設備,讀寫時不是按單個字節進行的,而是按塊,每次讀寫一個塊(一般一個塊大小4096個字節);如果一個塊的大小是4096個字節,則寫入一個字節和寫入4096個字節,都需要進行一次I/O操作,用時則是相同的;

二、Python中,文件的對象的緩沖行為

# python中普通文件默認的緩沖行為:全緩沖,當湊夠一個塊的數據(4096個字節,也是緩沖區的大小)後,才進行系統調用(也就是I/O操作);

# 緩沖區的大小,是根據平臺(如python)和塊設備(如磁盤)自身的屬性相關的;

設置緩沖模式,及緩沖區大小:

  格式:open(file, ‘r‘, buffering = n/1/0)

  A、buffering = n,n > 1 :設定緩沖模式為全緩沖,緩沖區大小為n個字節;

  B、buffering = 1:設定緩沖模式為行緩沖,遇到換行符 ‘\n‘ 時進行系統調用,也就是I/O操作,將數據寫入磁盤;

  C、buffering = 0:此為無緩沖你模式,只要有數據,就直接進行系統調用,也就是進行I/O操作,將數據寫入磁盤;

問題22:如何設置文件的緩沖