快速掌握 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系统进行封装来提高文件操作的效率。

封装mysql数据库_快速掌握 Mysql数据库对文件操作的封装相关推荐

  1. mysql sandbox_mysql Sandbox 快速部署mysql环境

    什么是mysql sandbox? mysql sandbox 是一个用per语言写的一套mysql部署工具 http://sourceforge.net/projects/mysql-sandbox ...

  2. spring批量写入mysql数据库_快速使用组件-spring batch(3)读文件数据到数据库

    tags: springbatch 1.引言 上一篇文章<快速了解组件-spring batch(2)之helloworld>对Spring Batch进行了入门级的开发,也对基本的组件有 ...

  3. oracle的优化适用于mysql吗_性能优化之数据库优化,适用于Sqlite、Mysql、Oracle、Sql server,详细介绍了索引和事务及部分针对Sqlite的优化...

    本文为性能优化的第一篇--数据库性能优化,原理适用于大部分数据库包括Sqlite.Mysql.Oracle.Sql server,详细介绍了索引(优缺点.分类.场景.规则)和事务,最后介绍了部分单独针 ...

  4. mysql做kv数据库_从零开始写KV数据库:基于哈希索引

    前言 新的KV数据库层出不穷,我们经常听说的KV数据库如RocksDb.Hbase等都是基于日志结构的存储引擎.最近我在看<数据密集型应用系统设计>,里面有一章专门在讲日志结构的存储引擎的 ...

  5. mysql猎豹_猎豹网校MySQL数据库

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 猎豹网校MySQL数据库 链接:http://pan.baidu.com/s/1i3wyPjn 密码:qxhm 教程目录 第1章 了解SQL 1.1 数据 ...

  6. 服务器损坏mysql修复_云服务器mysql数据库损坏修复mysql

    有的时候因为各种原因导致mysql数据库损坏,我们可以使用mysql自带的mysqlcheck命令来快速修复所有的数据库或者特定的数据库,检查优化并修复所有的数据库. 1.先在运行中输入CMD,启动命 ...

  7. Alibaba之MySQL宝典_阿里巴巴内部 MySQL宝典 意外流出!极致经典,堪称数据库的天花板...

    MySQL 是一个关系型数据库,使用 SQL 语言进行增删改查操作,目前属于 Oracle 旗下的产品. MySQL 数据库开源免费,能够跨平台,支持分布式,性能也不错,可以和 PHP.Java 等 ...

  8. 兄弟连mysql数据库_兄弟连学python-------MySQL数据库基础知识

    1.数据库系统(database system) 数据库系统是计算机系统中一种专门管理数组资源的系统,数据库存储的是一组或多组经过处理后的数据,管理这个数据库的软件成为数据库管理系统. 组成: 数据库 ...

  9. access 数据库 mysql数据库_如何将Access数据库移植到MySQL数据库

    序论 很多MySQL用户都有过将Access移植到MySQL的计划,不过这个移植过程性能和实践的相关描述资料很少.本文将为大家总结将Access应用程序成功移植到MySQL的要点和注意事项. 由于Ac ...

最新文章

  1. python ssh登录远程执行命令
  2. 进制在c语言中的作用,C语言中的进制是什么意思?
  3. mysql主从 1050错误
  4. Java运行时动态加载类之ClassLoader
  5. MapReduce中的partitioner
  6. Docker的常用管理命令Docker将数据挂载到容器的三种方式
  7. neo4j 修改密码
  8. 此计算机必须为委派而被信任_如何增强 ClassLoader 双亲委派模式 ?
  9. fitbit手表中文说明书_使用机器学习预测Fitbit睡眠分数
  10. Maven - 依赖冲突
  11. 频谱仪使用方法图解_安全继电器工作原理、接线图、使用方法图解
  12. 每日算法系列【LeetCode 233】数字 1 的个数
  13. linxu的文件类型和扩展名
  14. paip.mysql 性能测试 报告 home right
  15. 傻瓜攻略(二)——MATLAB数据挖掘之Apriori算法实现
  16. NLPIR在线系统介绍
  17. 如何升级iOS15,描述文件详细安装教程
  18. 郑捷《机器学习算法原理与编程实践》学习笔记(第三章 决策树的发展)(二)_C4.5...
  19. Dell PowerEdge R640:NVMe直连、NDC网卡、PERC10一览
  20. 专利申请怎样做快速预审?

热门文章

  1. 剑指offer——面试题42-2:翻转单词顺序
  2. 【重点 递归版】剑指offer——面试题16:反转链表
  3. 拆散组合思路求解期望,方差
  4. Android源码分析(三)-----系统框架设计思想
  5. Django学习笔记5-url
  6. 机器学习系列——随机森林(五)
  7. ANDROID模拟器访问本地WEB应用10.0.2.2
  8. 在github上参与开源项目日常流程
  9. System Center VMM请注意不同语言版本的差异
  10. 中小企业什么OA办公系统适用呢?