Mysql資料庫對檔案操作的封裝

來源:互聯網
上載者:User

在查看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系統進行封裝來提高檔案操作的效率。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.