详解MySQL数据库对文件操作的封装
在查看MySQL对文件的操作中,它在不同的操作系统上对文件的操作,除了使用标准C运行库函数,包括open、close、seek等,在Win32下的文件和目录操作函数使用了CreatFile、CloseHandl、SetFilePointer等,很多人可能不明白为什么对文件的操作要封装出两套函数。
0 N) h: Y/ }- V" M电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
$ @/ k7 E3 |# ], }3 k电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
% e2 Q9 Z1 D. \+ w* O# z: S我爱电脑技术社区--打造最好的电脑技术自学交流平台其实使用API和标准库函数都可以生成文本文件和二进制文件,在这点上没有区别。同read()对应的是ReadFile,同write()对应的是WriteFile,同seek()对应的是SetFilePointer,同close对应的是CloseHandle。这两套函数都可以使用。但是Win 32系统把文件的概念进行了扩展。无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用API函数CreateFile来打开或创建的。该函数的声明为: 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站! G6 a t8 o* l% g6 h5 e4 `
我爱电脑技术社区--打造最好的电脑技术自学交流平台+ W9 n" f E1 n7 J" R' m
打造最好的电脑自学交流论坛. T$ Y, Y4 R: |! u% j8 R% D
HANDLE CreateFile(
' e' v- \/ Q1 D/ ]2 E; |打造最好的电脑自学交流论坛 LPCTSTR lpFileName, // 文件名
" n0 q6 R) x7 e: N打造最好的电脑自学交流论坛 DWORD dwDesiredAccess, // 访问模式
. q9 T4 u; Q3 G9 k2 k1 [电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 DWORD dwShareMode, // 共享模式 我爱电脑技术论坛/ c6 X- A2 c) y3 x8 L/ I
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 通常为NULL
; A# @# U& Q* q/ C DWORD dwCreationDistribution, // 创建方式 我爱电脑技术论坛+ R& {+ R. r$ p8 u) o/ j: c
DWORD dwFlagsAndAttributes, // 文件属性和标志
. `; m( L3 ]0 ]; S1 V1 I. x4 F HANDLE hTemplateFile // 临时文件的句柄,通常为NULL
8 k# [% ?- ], `1 o: x+ ^打造最好的电脑自学交流论坛
: |# ]' J' H8 T; U8 ]我爱电脑技术社区--打造最好的电脑技术自学交流平台我爱电脑技术社区--打造最好的电脑技术自学交流平台& \- b* x4 I( v9 b% L
如果调用成功,那么该函数返回文件的句柄,如果调用失败,则函数返回:
! m C! X; ` T) ?我爱电脑技术论坛
1 h4 Z2 @( T, twww.520diannao.com
* d0 Q2 z* E( f5 u0 K0 N打造最好的电脑自学交流论坛INVALID_HANDLE_VALUE我爱电脑技术社区--打造最好的电脑技术自学交流平台* d* R0 c$ Z0 }4 F) c8 A# K: U1 X
打造最好的电脑自学交流论坛2 k7 E: x/ h) u2 k8 X( X8 U
/ J- v/ d% R( Y. }! F% r! C电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站在用ReadFile和WriteFile读写时,既可以同步执行,也可以异步执行。ReadFile和WriteFile函数是否为执行异步操作是由CreateFile函数决定的。如果在调用CreateFile创建句柄时指定了FILE_FLAG_OVERLAPPED标志,那么调用ReadFile和WriteFile对该句柄进行的读写操作就是异步的,如果未指定异步标志,则读写操作是同步的。在同步执行时,函数直到操作完成后才返回。这意味着在同步执行时线程会被阻塞,从而导致效率下降。在异步执行时,即使操作还未完成,调用的函数也会立即返回。费时的I/O操作在后台进行,这样线程就可以干别的事情。这样可以大大的提高效率。这一点是值得我们学习和借鉴的,对于我们在文件的操作方面也可以对win32系统进行封装来提高文件操作的效率。