【2016/1】文件操作 file_IO 系統調用與庫函數

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/hsgwpj/article/details/50597405

句柄:filediscriber(fd)

  文件描述符本質爲一個整型的數據,是對一個數據表的索引值

內存的實模式和虛模式:剛開機內存使用實模式,之後使用虛模式來運行應用。

   CPU復位(reset)或加電(power on)的時候以實模式啓動,處理器以實模式工作。
   虛模式則是以映射的形式將應用使用的內存地址虛擬化映射到實際內存上。
   man 2 open         #打開文件的各種方式(flags)
   man 2 read / write #文件的讀寫

系統調用是最快的 但是佔用了內核 不建議頻繁使用

   對fd的操作是類UNIX系統的操作

庫調用可移植性好 對內核依賴性低

   庫函數使用FILE指針的流式傳輸,是標準庫的內容

— 查 兩者區別 原理 性能 效益

stat fstat lstat 函數中的 *buf 是要求一片空間而不是一個指針
— 區別是 fstat 使用fd lchown 使用對象是link文件
— 同理 chown fchown lchown 是一樣的

cp -p 帶屬性拷貝

ps 定製 -eo <定製項目>

lseek 中的 whence
- SEEK_SET 從頭開始
- SEEK_CUR 從之前的指針開始相對偏移
- SEEK_END 從尾開始

lseek(fd, SEEK_CUR, 0) 返回當前指針所指的位置

   free #查看內存與交換區使用率
   流的讀寫(fread/fwrite)中的大小是 塊字節和塊個數的乘積 返回值是塊各個數
   使用庫函數(stdio)中的函數比較通用 易於移植
   --- 而read write 是linux的內核中的函數
   流讀寫是有緩存的! 會在close時進行刷新,而系統調用是及時的
   基於流的打開文件會在內存中佔用一片位置,將讀寫的內容放在緩存中,最後再寫入硬盤
   流操作時對系統調用的封裝,減少了IO的次數

系統調用存在切換內核上下文的問題 會使內核運行速度減慢 尤其是多人調用
如果大量單人調用速度提高 反之速度降低

可以使用fdopenfileno 來轉換系統調用與標準庫

linux下可以用uname獲取其版本

fopen 返回NULL 且錯誤碼爲21: EISDIR 是目錄
或者用stat的st_mode中對文件類型的修飾
S_ISDIR(stat.st_mode) -> 是目錄

   fdopendir()//打開目錄
   fcntl()    //對文件的操作(刪除)
   unlink()   //同上
   system()   //用shell命令刪除
   stat()     //用errno獲取文件是否存在

  //系統調用:
   opendir()
   readdir()  //依次讀目錄下一個文件的名字當返回爲空時讀取結束
   mkdir()    //創建一個目錄(mode_t 用stat的mode值)
   chmod()    //改變st_mode值

Hash算法! -> 適用的數據結構

mira DB -> mysql 被收購後作者的作品

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章