Linux文件的IO操作 一


系統調用

  • 系統調用: 操作系統提供給用戶程序調用的一組“特殊”接口,用戶程序可以通過這組“特殊”接口來獲得操作系統內核提供的服務

    

  • 為什么用戶程序不能直接訪問系統內核提供的服務

      為了更好地保護內核空間,將程序的運行空間分為 內核空間 和 用戶空間也就是常稱的內核態用戶態

    它們分別運行在不同的級別上 在邏輯上是相互隔離的 。 因此 用戶進程在通常情況下不允許訪問內核數據 ,

    也無法使用內核函數,它們只能在用戶空間操作用戶數據 ,調用用戶空間的函數 。

  •  進行系統調用時 ,程序運行空間從用戶空間進入內核空間 ,處理完后再返回到用戶空間

      

  

  • 系統調用並不是直接與程序員進行交互的,它僅僅是一個通過軟中斷機制向內核提交請求,以獲取內核服務的接口 。
  • 在實際使用中程序員調用的通常是用戶編程接口 API 。
      

  • Linux 中的系統調用包含在 Linux 的 libc 庫中,通過標准的 C 函數調用方法可以調用

    

  • 系統命令相對 API 更高了一層,它實際上是一個可執行程序,它的內部調用了用戶編程接口 (API )來實現相應的功能 。

      

  • 內核如何區分和引用特定的文件

      通過   文件描述符 。 文件描述符是一個非負的整數 ,是一個索引值 ,指向在內核中每個進

    程打開文件的記錄表 。 當打開一個現存文件或創建一個新文件時,內核就向進程返回一個文件描
    述符;當需要讀寫文件時 也需要把文件描述符作為參數傳遞給相應的函數 。

  • 一個進程啟動時 通常會打開 3 個文件:

    ----- 標准輸入           描述符為 0

    ------ 標准輸出          描述符為 1

    ------ 標准出錯處理   描述符為 2


  Linux 文件 IO 函數說明

  • open(): 用於打開或創建文件,可以指定文件的屬性及用戶的權限等各種參數;
  • creat():打開一個文件,如果文件不存在,則創建它;
  • close():用於關閉一個被打開的文件。當一個進程終止時,所有被它打開的文件都
    由內核自動關閉,很多程序都使用這一功能而不顯示地關閉一個文件;

  • read():用於將從指定的文件描述符中讀出的數據放到緩存區中,並返回實際讀入
    的字節數。若返回 0 則表示沒有數據可讀,即已達到文件尾 。 讀操作從文件的當
    前指針位置開始;

  • write():用於向打開的文件寫數據,寫操作從文件的當前指針位置開始。對磁盤
    文件進行寫操作,若磁盤已滿或超出該文件的長度,則 write()函數返回失敗;

   

#include <stdlib.h
#include <sys/types.h
#include <sys/stat.h
#include <fcntl.h
#define FILE_PATH "./test.txt"
int main(void)
{
    int fd;
    if ((fd = open(FILE_PATH, O_RDWR | O_CREAT | O_EXCL, 0666)) < 0)
        printf("open error\n");
        exit(-1);
    } else {
        printf("open success\n");
    }
    return 0;
} 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM