系统级I/O
Unix I/O
输入操作是从I/O设备拷贝数据到主存,而输出操作是从主存拷贝数据到I/O设备。
一个文件就是一个字节序列。
所有的I/O设备,如网络、磁盘、和终端,都被模型化为文件,而所有的输入和输出都被当做想对应的文件的读写来执行。
四个基本操作:
打开文件
改变当前的文件位置
读写文件
关闭文件
打开和关闭文件
打开文件:
#include <sys/types.h>#include <sys/stat.h> #include <fcntl.h>
int open(char *filename, int flags, mode_t mode);//Returns: new file descriptor if OK, −1 on errorflags 参数指明如何访问 :
O_RDONLY: Reading only
O_WRONLY: Writing only
O_RDWR: Reading and writing
flag可以通过或一个掩码,为写提供额外的提示:
O_CREAT:如文件不存在,建立一个空文件
O_TRUNC:如存在,覆盖它
O_APPEND:如存在,接着原文件之后添加
mode参数指明新文件的访问权限:
使用时需要用mode减去原umask
关闭文件:
#include <unistd.h>
int close(int fd);//Returns:0 if OK,-1 on error读和写文件
读文件:
include <unistd.h>
ssize_t read(int fd, void *buf, size_t n);//Returns: number of bytes read if OK, 0 on EOF, −1 on error#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t n);//Returns: number of bytes written if OK, −1 on error读取文件元数据
stat和fstat函数:
#include<unistd.h>
#include<sys/stat.h>
int stat(const char *filename, struct stat *buf);//Returns:0 if OK,-1 on error
int fstat(int fd, struct stat *buf);//Returns:0 if OK,-1 on error
两者区别在与stat输入文件名,fstat输入文件描述符
共享文件
描述符表:每个进程一张独立的表
文件表:所有进程共享,存放文件位置,引用计数和指向v-node表的指针
v-node 表:所有进程共享,存放文件信息
用同一个filename调用open函数两次会打开不同的文件表,而打开相同的v-node表
示例:


I/O重定向
重定向函数:
#include<unistd.h>
int dup2(int oldfd, int newfd);//Returns:descriptor if OK, −1 on error
即将对后者的操作统统等同于对前者的操作
标准I/O
ANSI C定义了一组高级的输入输出函数,称为标准I/O库,为程序员提供了Unix I/O的较高级别的替代
打开和关闭文件:fopen和fclose
读和写字节的函数:fread和fwrite
读写字符串:fgets和fputs
复杂的格式的I/O:scanf和printf
标准I/O库将一个打开的文件模型化为一个流,一个流就是一个指向FILE类型的结构的指针
参考:http://www.cnblogs.com/shangdahao/archive/2013/04/14/3019461.html
系统级I/O的更多相关文章
- CentOS:设置系统级代理(转)
原文地址:http://www.cnblogs.com/cocowool/archive/2012/07/05/2578487.html YUM代理设置 编辑/etc/yum.conf,在最后加入 # ...
- 系统级性能分析工具perf的介绍与使用
测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...
- 从service弹出系统级自定义提示框,可在任意页面弹出
添加权限 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> // 显示 ...
- 转 系统级编程语言性能PK
http://www.solidot.org/story?sid=35754 看了此文,为什么我现在如此看好Rust C/C++已经统治系统编程很久,除了ObjectiveC之外语言都无法获得很高的关 ...
- 系统级IO实践学习记录
代码分析 cp1.c 功能:复制文件. #include <stdio.h>#include <stdlib.h>#include <unistd.h>#inclu ...
- 系统级I/O学习记录
重要知识点 输入/输出(I/O) I/O是主存和外部设备(如磁盘驱动器.终端和网络)之间拷贝数据的过程. 输入操作是从I/O设备拷贝数据到主存. 输出操作是从主存拷贝到I/O设备. Unix I/O ...
- 第十章 系统级I/O
第十章 系统级I/O 一.Unix I/O 1.一个unix文件就是一个m个字节的序列 2.unix外壳创建的每个进程开始时都有三个打开的文件:标准输入(0) .标准输出(1)和标准错误(-1). 二 ...
- 第十章实践——系统级I/O代码运行
第十章实践——系统级I/O代码运行 实验代码清单如下: 1. cp1——复制一个文件到另一个文件中(两个已经存在的文件) 复制前: 执行后结果 2. setecho.echostate——改变.显示输 ...
- 第10章 系统级I/O
第10章 系统级I/O 10.1 Unix I/O 一个Unix文件就是一个m个字节的序列:B0,B1,…,BK,…,Bm-1 Unix I/O:一种将设备优雅地映射为文件的方式,允许Unix内核引出 ...
- 系统级I/O 第八周11.1~11.8
第十章 系统级I/O 输入输出I/O是在主存和外部设备(如磁盘,网络和终端)之间拷贝数据的过程.输入就是从I/O设备拷贝数据到主存,而输出就是从主存拷贝数据到I/O设备. 所有语言的运行时系统都提供执 ...
随机推荐
- 为什么Erlang比C慢那么多倍?
Erlang 一直以慢“著称”,本文就来看看 Erlang 慢在什么地方,为什么比实现同样功能的 C 语言程序慢那么多倍.Erlang 作为一种虚拟机解释的语言,慢是当然的.不过本文从细节上分析为什么 ...
- docker-4 Dockerfile的使用
Dockerfile FROM 基础镜像 MAINTAINER 维护这信息 RUN 运行什么命令,在命令前面加上RUN ADD 往里面加点文件,copy文件,会自动 ...
- cxf开发Restful Web Services
一.restful web services rest全称是Representation State Transfer(表述性状态转移).它是一种软件架构风格,只是提供了一组设计原则和约束条件.在re ...
- 被废弃的 Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit
最近学习多线程的知识,看到API里说这些方法被废弃了,就查了一下原因 Thread.stop 这个方法会解除被加锁的对象的锁,因而可能造成这些对象处于不一致的状态,而且这个方法造成的ThreadDea ...
- cocos2d-x之悦动的小球
发现问题:update()函数不能用virtual前缀 主: bool HelloWorld::init() { if ( !LayerColor::initWithColor(Color4B(255 ...
- hibernate查询方式
hibernate查询方式:1.本地SQL查询 2.HQL查询 3.QBC查询 HQL查询:是面向对象的查询语言,是使用最广的一种查询方法 QBC查询:Query by Criteria是一套接口来实 ...
- 第一篇 UEditor入门部署和体验
UEditor 是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码. UEditor富文本编辑器,轻量, ...
- Ajax详解及其案例分析------如何获得Ajax对象,使用Ajax对象发送GET和POST请求,校验用户名,POST和GET请求时的乱码处理,实现级联的下拉列表
本节主要内容预览: 1 获得Ajax对象 2 使用Ajax对象发送GET请求 3 使用Ajax对象发送POST请求 4 使用Ajax校验用户名 5 POST请求时的乱码处理 6 GET请求时的乱码处理 ...
- 2014 Super Training #8 C An Easy Game --DP
原题:ZOJ 3791 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3791 题意:给定两个0-1序列s1, s2,操作t ...
- C语言异或运算在程序设计中的妙用
异或运算符∧也称XOR运算符.它的规则是若参加运算的两个二进位同号,则结果为0(假):异号则为1(真).即0∧0=0,0∧1=1,1∧1=0. 性质: (1).与1异或会翻转 (2).与0异或保持不变 ...