在查看Mysql對文件的操作中它在不同的操作系統上對文件的操作除了使用標准C運行庫函數包括opencloseseek等在Win下的文件和目錄操作函數使用了CreatFileCloseHandlSetFilePointer等很多人可能不明白為什麼對文件的操作要封裝出兩套函數
其實使用API和標准庫函數都可以生成文本文件和二進制文件在這點上沒有區別同read()對應的是ReadFile同write()對應的是WriteFile同seek()對應的是SetFilePointer同close對應的是CloseHandle這兩套函數都可以使用但是Win 系統把文件的概念進行了擴展無論是文件通信設備命名管道郵件槽磁盤還是控制台都是用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操作在後台進行這樣線程就可以干別的事情這樣可以大大的提高效率這一點是值得我們學習和借鑒的對於我們在文件的操作方面也可以對win系統進行封裝來提高文件操作的效率
From:http://tw.wingwit.com/Article/program/MySQL/201311/29571.html