系统级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 error
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>
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设备. 所有语言的运行时系统都提供执 ...
随机推荐
- Cent OS服务器配置(JDK+Tomcat+MySQL)
本文摘自:Cent OS服务器配置(JDK+Tomcat+MySQL) 学习tar解压 解压 tar 文件 tar -zxvf apache-tomcat-6.0.35.tar.gz tomcat ...
- PS网页设计教程XXV——使用Photoshop设计的老式组合布局
作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...
- SQLServerDBA十大必备工具---让生活轻松点(转)
曾经和一些DBA和数据库开发人员交流时,问他们都用过一些什么样的DB方面的工具,大部分人除了SSMS和Profile之外,基本就没有使用过其他工具了: 诚然,SSMS和Profile足够强大,工作的大 ...
- C# Socket和TCP连接的区别
网络通信七层参考模型介绍: 物理层: HUB,网线 链路层: MAC,ARP,交换机 网络层:IP,ICMP,IGMP,路由器 传输层: TCP,UDP 会话层: HTTP,SMTP,FTP,POP3 ...
- Windows下MongoDB安装与设置
最近在研究传奇已久的MongoDB,遇到很多问题,将整理好的Windows下的MongoDB整体到连接过程分享给大家,也留给自己. 第一步:下载http://www.mongodb.org/downl ...
- C语言杂谈(三)存储类别
本文讨论C语言中的存储类别,包括数据在内存的存储.变量的存储类别.函数的存储类别.生存周期.下图为计算机的存储空间,有寄存器和内存. 一.存储区域 1.寄存器:存放立即参加运算的数据. 2.系统区:存 ...
- JMS介绍入门大白话版
以下内容转自: http://setting.iteye.com/blog/1097767 ------------------------------------------------------ ...
- [cocos2dx]让CCScrollView支持分页
[cocos2dx]让CCScrollView支持分页 做过IOS开发的朋友, 肯定知道UIScrollView有一个isPaged属性. 当设置其为true的时候, 滑动会自动分页. 即, 每次滑动 ...
- bzoj-3170 3170: [Tjoi 2013]松鼠聚会(计算几何)
题目链接: 3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec Memory Limit: 128 MB Description 有N个小松鼠,它们的家用一个点x,y表 ...
- HDU 2602 Bone Collector --01背包
这种01背包的裸题,本来是不想写解题报告的.但是鉴于还没写过背包的解题报告.于是来一发. 这个真的是裸的01背包. 代码: #include <iostream> #include < ...