第五篇:使用无缓冲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来读写效率高,没想到里面还有这么多陷阱,这两天突然被其中一个陷阱折腾一下:读一个文件,然后写到另外一个文件,前后两个文件居然不一样? ...
随机推荐
- Android使用SeekBar
转自:http://my.oschina.net/pingdy/blog/376735 最近有做一个android项目,里面有使用到在播放视频时可以跳播,同时动态显示播放时间.类似于下图 的效果,我只 ...
- struts action不在是一个单例类
在servlet中,servlet类是一个单例,在servlet中的成员变量,将会被所有请求共享,同时也有可能存在线程安全问题,如有一个成员变量num,每次方法后市的num自增 package act ...
- SugarCRM如何检查控制器权限?
SugarController定义了一个实例变量$hasAccess,布尔值,默认为true.该实例变量指示使用者是否有执行摸个action的权限: class SugarController{ /* ...
- 萌新学习Python爬取B站弹幕+R语言分词demo说明
代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ...
- Linux内核project导论——网络:路由:路由原理
总览 路由表 IP层通过路由将数据包送达该送达的目的地址,这就要求在整个网络中建立正确的路由表.路由表的内容是记录要到达哪里下一跳须要发到哪里(能够是port能够是ip),如此整个网络在单个节点仅仅知 ...
- 基于easyui fom分组插件
本插件适用于表单按属性分组,可以动态设置显示的列数,每一个表单宽度,表单类型,以及对齐.不同panel之间的表单也是对齐的. 效果: 依赖:jquery ,easyui, 实现过程:整个控件一个pan ...
- vue cli3.0 build 打包 的 js 文件添加版本号 解决 js 缓存问题
在 vue.config.js 的文件中加入下面这段话 // vue.config.jsconst Timestamp = new Date().getTime();module.exports = ...
- vsftp 虚拟用户高级设置(转载)
发布:xiaokk 来源:net [大 中 小] vsftp 虚拟用户高级设置 本文转自:http://www.jbxue.com/article/1724.html 1.安装所需软件包 ...
- [个人开发人员赚钱九]做一个日收入10元的APP!
[导语]尽管讲了非常多个人开发人员的文章.但新手开发人员怎样赚自己的第一个10块钱.确是最难的事情.群里有人说都不知道干什么app赚钱.全然没有想法.而且常常问我有什么高速赚钱的方法.我仅仅能遗憾地 ...
- 如何使用Photoshop(PS)将图片的底色变为透明
很多时候需要将一张图片的底色变得透明.本文描述了使用PS将图片的一部分变得透明的方法.本例将一段艺术字的背景去掉,将背景透明的文字单独保存成图片,这样以后将这段文字粘贴到其他素材上的时候,就不用担心它 ...