前言

  本文介绍使用无缓冲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函数读写文件的更多相关文章

  1. 第五篇:使用无缓冲IO函数读写文件

    前言 本文介绍使用无缓冲IO函数进行文件读写. 所谓的无缓冲是指该IO函数通过调用系统调用实现,其实系统调用内部的读写实现也是使用了缓冲技术的. 读写步骤 1. 打开文件 open 函数 2. 读写文 ...

  2. java IO流之三 使用缓冲流来读写文件

    原文:http://blog.csdn.net/haluoluo211/article/details/52183219 一.通过BufferedReader和BufferedWriter来读写文件 ...

  3. Python IO编程-读写文件

    1.1给出规格化得地址字符串,这些字符串是经过转义的能直接在代码里使用的字符串 需要导入os模块 import os >>>os.path.join('user','bin','sp ...

  4. Commons IO方便读写文件的工具类

    Commons IO是apache的一个开源的工具包,封装了IO操作的相关类,使用Commons IO可以很方便的读写文件,url源代码等. 普通地读取一个网页的源代码的代码可能如下 InputStr ...

  5. Python开发【第三篇】:函数&读写文件

    三元运算 三元运算,是条件语句的简单的写法.如果条件为真,则返回值1,否则,返回值2. ret = 值1 if 条件 else 值2 深浅拷贝 对于数字(int)和字符串(str)而言,赋值.深拷贝. ...

  6. Java IO如何读写文件

    Java把这些不同来源和目标的数据都统一抽象为数据流:Java语言的输入输出功能是十分强大而灵活的:在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上 ...

  7. IO流 读写文件

    读写文件 如前所述,一个流被定义为一个数据序列.输入流用于从源读取数据,输出流用于向目标写数据. 下图是一个描述输入流和输出流的类层次图. 下面将要讨论的两个重要的流是 FileInputStream ...

  8. 161228、Java IO流读写文件的几个注意点

    平时写IO相关代码机会挺少的,但却都知道使用BufferedXXXX来读写效率高,没想到里面还有这么多陷阱,这两天突然被其中一个陷阱折腾一下:读一个文件,然后写到另外一个文件,前后两个文件居然不一样? ...

  9. 161108、Java IO流读写文件的几个注意点

    平时写IO相关代码机会挺少的,但却都知道使用BufferedXXXX来读写效率高,没想到里面还有这么多陷阱,这两天突然被其中一个陷阱折腾一下:读一个文件,然后写到另外一个文件,前后两个文件居然不一样? ...

随机推荐

  1. ubuntu14.04 python + opencv 傻瓜式安装解决方案

    ubuntu14.04  python + opencv 傻瓜式安装解决方案 ubuntu下使python和opencv来做开发的话,总要花那么点时间来配置环境.我偶然间发现了一种傻瓜式安装办法希望快 ...

  2. 在vue路由当中使用keep-alive避免多次加载组件,减少消耗

    今天在vue当中使用了full-page这个组件.但是发现在每次路由跳转完之后,再回到使用fullpage的这个页面,fullpage会报错,fullpage只能初始化一次. 这个时候给路由使用kee ...

  3. 使用electron将单页面vue webapp 打包成 PC端应用

    在看张鑫旭博客得时候看到了electron这个东西,来了兴趣,就按照上面写的将已经做好得vue项目拿来试了试,出乎意料得顺利 electron简单说下electron,就是把 chrome内核和你的项 ...

  4. GC overhead limit exceeded,tomcat修改jvm内存

    tomcat修改jvm内存 内存大小:-Xms256M -Xmx512M -XX:PermSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=512m -Dja ...

  5. 快速沃尔什变换 FWT

    FWT 是处理位运算卷积的有效工具…… 原理……不懂,但背板子很简单,在这贴博客是为了放个模板,免得到时候忘记. 其中0为或卷积,1为与卷积,2为异或卷积…… void FWT(long long a ...

  6. 百度图表echars插件使用案例

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  7. Spring入门 (IOC)

    1.实现原理

  8. 使用 Craft CMS 搭建blog模型

    原文链接:http://www.supperxin.com/Coding/Details/create-blog-using-craft-cms Craft CMS站点的搭建可以参考这篇:使用Dock ...

  9. 虚拟机centos 同一个tomcat、不同端口访问不同的项目

    在tomcat中复制webapps目录,并重命名:

  10. POJ 3259 Wormholes 最短路+负环

    原题链接:http://poj.org/problem?id=3259 题意 有个很厉害的农民,它可以穿越虫洞去他的农场,当然他也可以通过道路,虫洞都是单向的,道路都是双向的,道路会花时间,虫洞会倒退 ...