系统级I/O
2015-11-08 17:32
169 查看
Unix I/O
输入操作是从I/O设备拷贝数据到主存,而输出操作是从主存拷贝数据到I/O设备。一个文件就是一个字节序列。
所有的I/O设备,如网络、磁盘、和终端,都被模型化为文件,而所有的输入和输出都被当做想对应的文件的读写来执行。
四个基本操作:
打开文件
改变当前的文件位置
读写文件
关闭文件
打开和关闭文件
打开文件:#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
flags 参数指明如何访问 :
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>
读和写文件
读文件:include <unistd.h>
读取文件元数据
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
相关文章推荐
- c语言 goto语句
- iOS开发-前言篇C-函数
- "无法删除数据库,因为该数据库当前正在使用"问题解决
- json、javaBean、xml互转的几种工具介绍
- Spring MVC 框架搭建及详解
- JVM垃圾回收机制
- c语言 时间详解
- 汇编程序-更灵活的定位内存地址方法
- muduo库阅读(3)——基本类型之阻塞队列
- Linux词汇
- 批量修改文件名
- 汇编程序-更灵活的定位内存地址方法
- ios开发-前言基础篇C语言
- 如何检查内存泄露问题
- 再见,NOIP!
- spring配置数据源
- C# : Form1 => Form2 -> Form1
- javascript中的稀疏数组(sparse array)和密集数组
- 《大道至简》第六章 读后感
- 大数据生态圈