mysql 程序员 Windows Ubuntu java Android nginx google centos 云计算 linux Python 微软 开源 shell wordpress 编程 apache Firefox php

底层的文件I/O操作

   緩沖文件系統:高級文件系統,將在用戶空間中自動為正在使用的文件開辟內存緩沖區;
   緩沖式文件系統I/O操作主要是由C語言的標準輸入輸出庫函數提供。

   非緩沖文件系統:低級文件系統,又稱為低層文件系統。如果需要,只能由用戶在自己的程序中為每個文件設定緩沖區。
   非緩沖式文件系統I/O操作主要是由系統調用提供
   緩沖文件操作的特點
   ANSI標準C庫中的文件處理函數為了減少使用系統調用的次數,提高效率,根據應用的不同,采用緩沖區機制:在內存開辟一個“緩沖區”,為程序中的每一個文件使用,在對磁盤文件進行讀操作時,可以一次從文件中讀出大量的數據到緩沖區中,以後對這部分的訪問就不需要再使用系統調用了,即只需要少量的CPU狀態切換。在對文件進行寫操作時,可以先將內容存入緩沖區,待緩沖區寫滿後,或者確實需要更新時再調用系統調用將緩沖區中的內容一次寫入到磁盤中。

    非緩沖文件操作的特點
    采用非緩沖的文件訪問方式,每次對該文件進行讀寫操作時,都需要使用讀寫文件系統調用來處理該操作,因此,如果用戶需要訪問某個磁盤文件,則每訪問一次都要執行一次系統調用,執行一次系統調用將涉及到CPU狀態的切換,即從用戶空間切換到內核空間,實現上下文的切換,這將損耗一定的CPU時間,頻繁的磁盤訪問對程序的執行效率造成很大的影響。
open()、read()、write()、lseek()和close()屬於非緩存文件操作函數,這些函數的特點是不帶緩存(不帶緩存指的是每次read和write都調用內核中的一個系統調用),直接對文件(包括設備)進行讀寫操作。這些函數不是ANSI C的組成部分,但是是POSIX 的組成部分。

延伸阅读

评论