程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 細化解析:Mysql數據庫對文件操作的封裝

細化解析:Mysql數據庫對文件操作的封裝

編輯:關於MYSQL數據庫

  在查看MySQL對文件的操作中,它在不同的操作系統上對文件的操作,除了使用標准C運行庫函數,包括open、close、seek等,在Win32下的文件和目錄操作函數使用了CreatFile、CloseHandl、SetFilePointer等,很多人可能不明白為什麼對文件的操作要封裝出兩套函數。

  其實使用API和標准庫函數都可以生成文本文件和二進制文件,在這點上沒有區別。同read()對應的是ReadFile,同write()對應的是WriteFile,同seek()對應的是SetFilePointer,同close對應的是CloseHandle。這兩套函數都可以使用。但是Win 32系統把文件的概念進行了擴展。無論是文件、通信設備、命名管道、郵件槽、磁盤、還是控制台,都是用API函數CreateFile來打開或創建的。該函數的聲明為:

HANDLE CreateFile(
LPCTSTR lpFileName, // 文件名
DWord dwDesiredAccess, // 訪問模式
DWord dwShareMode, // 共享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 通常為NULL
DWord dwCreationDistribution, // 創建方式
DWord dwFlagsAndAttributes, // 文件屬性和標志
HANDLE hTemplateFile // 臨時文件的句柄,通常為NULL

  如果調用成功,那麼該函數返回文件的句柄,如果調用失敗,則函數返回:

INVALID_HANDLE_VALUE

  在用ReadFile和WriteFile讀寫時,既可以同步執行,也可以異步執行。ReadFile和WriteFile函數是否為執行異步操作是由CreateFile函數決定的。如果在調用CreateFile創建句柄時指定了FILE_FLAG_OVERLAPPED標志,那麼調用ReadFile和WriteFile對該句柄進行的讀寫操作就是異步的,如果未指定異步標志,則讀寫操作是同步的。在同步執行時,函數直到操作完成後才返回。這意味著在同步執行時線程會被阻塞,從而導致效率下降。在異步執行時,即使操作還未完成,調用的函數也會立即返回。費時的I/O操作在後台進行,這樣線程就可以干別的事情。這樣可以大大的提高效率。這一點是值得我們學習和借鑒的,對於我們在文件的操作方面也可以對win32系統進行封裝來提高文件操作的效率。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved