第五篇:使用无缓冲IO函数读写文件
前言
本文介绍使用无缓冲IO函数进行文件读写。
所谓的无缓冲是指该IO函数通过调用系统调用实现,其实系统调用内部的读写实现也是使用了缓冲技术的。
读写步骤
1. 打开文件 open 函数
2. 读写文件 read write 函数
3. 修改文件指针 lseek 函数 ( 可能和 2 交替进行 )
4. 关闭文件 close 函数
代码示例
//
// 本程序往一个文件中写入一个整型数组
// 然后读取这个数组并输出
// #include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <iostream>
#include <string> using namespace std; const int LEN=; int main(void) {
string filename;
cout << "请输入要处理的文件名: ";
cin >> filename; // 打开 filename 文件。
// 注意:
// 1. 第一个参数必须转换成C的字符串格式
// 2. 如果找不到文件,就会以 777 权限创建一个新的文件。
// 3. 如果要进行读写,还要使用O_RDWR参数。
int fd = ;
if (!(fd = open(filename.c_str(), O_CREAT|O_EXCL|O_RDWR, ))) {
cout << "打开/创建文件失败" << endl;
return ;
} // 初始化测试数组
int buf[LEN];
for (int i=; i<LEN; i++) {
buf[i] = i;
} // 将数组中的数据写入到打开的文件中
if (write(fd, buf, LEN*sizeof(int)) != LEN*sizeof(int)) {
cout << "写入失败" << endl;
return ;
} // 写入指针回退两个位置
lseek(fd, -*sizeof(int), SEEK_CUR); // 继续写入数据
if (write(fd, buf, LEN*sizeof(int)) != LEN*sizeof(int)) {
cout << "写入失败" << endl;
return ;
} // 写入指针回到文件顶部
lseek(fd, , SEEK_SET); // 从文件中读取数据并输出到标准输出
int n=;
while ((n = read(fd, buf, LEN*sizeof(int))) > ) {
// 这里切记不能够直接用write输出到标准输入,因为write不知道数组里面放的数据是什么类型。
for (int i=; i<n/sizeof(int); i++) {
cout << buf[i] << " ";
}
cout << endl;
}
if (n<) {
cout << "读入失败" << endl;
return ;
} // 关闭文件
close(fd); return ;
}
小结
1. read 和 write 函数是以二进制的方式读/写,函数本身是不会去识别数据格式的。
2. 当程序语句比较长的时候,要注意算符的优先级。( 参考代码 58 行 )
3. 使用完文件之后记得关闭文件描述符。
第五篇:使用无缓冲IO函数读写文件的更多相关文章
- 使用无缓冲IO函数读写文件
前言 本文介绍使用无缓冲IO函数进行文件读写. 所谓的无缓冲是指该IO函数通过调用系统调用实现,其实系统调用内部的读写实现也是使用了缓冲技术的. 读写步骤 1. 打开文件 open 函数 2. 读写文 ...
- Android简易实战教程--第十五话《在外部存储中读写文件》
第七话里面介绍了在内部存储读写文件 点击打开链接. 这样有一个比较打的问题,假设系统内存不够用,杀本应用无法执行,或者本应用被用户卸载重新安装后.以前保存的用户名和密码都不会得到回显.所以,有必要注意 ...
- java IO流之三 使用缓冲流来读写文件
原文:http://blog.csdn.net/haluoluo211/article/details/52183219 一.通过BufferedReader和BufferedWriter来读写文件 ...
- Python开发【第三篇】:函数&读写文件
三元运算 三元运算,是条件语句的简单的写法.如果条件为真,则返回值1,否则,返回值2. ret = 值1 if 条件 else 值2 深浅拷贝 对于数字(int)和字符串(str)而言,赋值.深拷贝. ...
- Python IO编程-读写文件
1.1给出规格化得地址字符串,这些字符串是经过转义的能直接在代码里使用的字符串 需要导入os模块 import os >>>os.path.join('user','bin','sp ...
- Java IO如何读写文件
Java把这些不同来源和目标的数据都统一抽象为数据流:Java语言的输入输出功能是十分强大而灵活的:在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上 ...
- Commons IO方便读写文件的工具类
Commons IO是apache的一个开源的工具包,封装了IO操作的相关类,使用Commons IO可以很方便的读写文件,url源代码等. 普通地读取一个网页的源代码的代码可能如下 InputStr ...
- IO流 读写文件
读写文件 如前所述,一个流被定义为一个数据序列.输入流用于从源读取数据,输出流用于向目标写数据. 下图是一个描述输入流和输出流的类层次图. 下面将要讨论的两个重要的流是 FileInputStream ...
- 161228、Java IO流读写文件的几个注意点
平时写IO相关代码机会挺少的,但却都知道使用BufferedXXXX来读写效率高,没想到里面还有这么多陷阱,这两天突然被其中一个陷阱折腾一下:读一个文件,然后写到另外一个文件,前后两个文件居然不一样? ...
随机推荐
- js实现页面跳转的两种方式
CreateTime--2017年8月24日08:13:52Author:Marydon js实现页面跳转的两种方式 方式一: window.location.href = url 说明:我们常用 ...
- Android设计模式(八)--模板方法模式
到国美面试Android的时候.问我的设计模式相关的问题: 1.单例模式的意义时什么. 2.有哪几种工厂方法模式: 3.你用过的模板方法模式.举例说明: 自己感觉答的一塌糊涂. 模板方法模式都没说出来 ...
- wcf json asp.net json
function BindNewsTypeTree() { var parentid; // $.getJSON(serviceUrl + "NewsTypeService.svc/GetN ...
- java基础讲解01-----简单了解一下java
2017-4-12(晚) 闲来无事,静静把自己了解的java,好好回忆一次.如果能帮助别人也好.会不断补充 java有关的书籍真的很多,我也不过多的介绍了. 1.什么是java 2.java的语言特 ...
- 使用Wifi连接ADB调试App
前提:你的手机ROOT过,做Android开发的,别跟人说你的手机不是ROOT的. 步骤: 1.在手机上把ADB服务进程的TCP端口设置为5555,这是Android ADB的默认调试商品.这需要 ...
- unity3d控制主摄像头移动
这篇很水,因为就只有一行代码==: Camera.main.transform.Translate (Vector3.forward); 这行代码控制主摄像头向前移动,其它的如下: up:向上 dow ...
- Calendar类经常用法 日期间的转换 set方法有巨坑
今天发现项目的工具类方法有个bug,并且还能迷惑你的bug,刚開始也是非常迷惑,由于这个bug之前出现过,可是过了两天就自己好了.今天又出现了.哦对,今天是 2017年3月31日,之 ...
- PyCharm设置python新建文件指定编码为utf-8
PyCharm新建文件时可以在模板中添加编码字符集为utf-8,新建文件可自动添加了
- 转:微软分布式云计算框架Orleans
http://www.cnblogs.com/ants/p/5122068.html 一种构建分布式. 高规模(伸缩)的应用程序 微软对奥尔良计划(Project Orleans)云计算框架开源.奥尔 ...
- 数据库出错提示Duplicate entry * for key *的解决方法
错误编号:1062 错误提示: 查询语句错误] ERR: Duplicate entry ' for key 'PRIMARY' SQL: ' PHP: misc.php: ; IP 问题分析: 向唯 ...