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的更多相关文章

  1. CentOS:设置系统级代理(转)

    原文地址:http://www.cnblogs.com/cocowool/archive/2012/07/05/2578487.html YUM代理设置 编辑/etc/yum.conf,在最后加入 # ...

  2. 系统级性能分析工具perf的介绍与使用

    测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...

  3. 从service弹出系统级自定义提示框,可在任意页面弹出

    添加权限 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> // 显示 ...

  4. 转 系统级编程语言性能PK

    http://www.solidot.org/story?sid=35754 看了此文,为什么我现在如此看好Rust C/C++已经统治系统编程很久,除了ObjectiveC之外语言都无法获得很高的关 ...

  5. 系统级IO实践学习记录

    代码分析 cp1.c 功能:复制文件. #include <stdio.h>#include <stdlib.h>#include <unistd.h>#inclu ...

  6. 系统级I/O学习记录

    重要知识点 输入/输出(I/O) I/O是主存和外部设备(如磁盘驱动器.终端和网络)之间拷贝数据的过程. 输入操作是从I/O设备拷贝数据到主存. 输出操作是从主存拷贝到I/O设备. Unix I/O ...

  7. 第十章 系统级I/O

    第十章 系统级I/O 一.Unix I/O 1.一个unix文件就是一个m个字节的序列 2.unix外壳创建的每个进程开始时都有三个打开的文件:标准输入(0) .标准输出(1)和标准错误(-1). 二 ...

  8. 第十章实践——系统级I/O代码运行

    第十章实践——系统级I/O代码运行 实验代码清单如下: 1. cp1——复制一个文件到另一个文件中(两个已经存在的文件) 复制前: 执行后结果 2. setecho.echostate——改变.显示输 ...

  9. 第10章 系统级I/O

    第10章 系统级I/O 10.1 Unix I/O 一个Unix文件就是一个m个字节的序列:B0,B1,…,BK,…,Bm-1 Unix I/O:一种将设备优雅地映射为文件的方式,允许Unix内核引出 ...

  10. 系统级I/O 第八周11.1~11.8

    第十章 系统级I/O 输入输出I/O是在主存和外部设备(如磁盘,网络和终端)之间拷贝数据的过程.输入就是从I/O设备拷贝数据到主存,而输出就是从主存拷贝数据到I/O设备. 所有语言的运行时系统都提供执 ...

随机推荐

  1. linux crontab & 每隔10秒执行一次

    linux下定时执行任务的方法  在LINUX中你应该先输入crontab -e,然后就会有个vi编辑界面,再输入0 3 * * 1 /clearigame2内容到里面 :wq 保存退出. 在LINU ...

  2. CSS盒模型重新理解篇

    最近比较闲,思索着怎么提高下JS技术,于是找到了昵称为豪情的这哥们的一篇文章,应该是哥们吧,详细了解了下,发现其中的试题CSS部分有些做起来很吃力,于是乎各种google恶补盒模型,找到了这哥们的一文 ...

  3. 仅IE6/7中添加checked为true的input到DOM中为false

    HTML INPUT元素有个checked属性,多数情况type为radio和checkbox. 当创建一个input,checked属性赋值为true,添加到DOM文档中,当再次取checked属性 ...

  4. Lighttpd

    一.简介 Lighttpd 是一个德国人领导的开源Web服务器软件,其根本的目的是提供一个专门针对高性能网站,安全.快速.兼容性好并且灵活的web server环境.具有非常低的内存开销,cpu占用率 ...

  5. hdu 2048 神、上帝以及老天爷(错排)

    神.上帝以及老天爷 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...

  6. 简单好用的日志管理工具 Logrotate

    前言 日志就像程序的生命记录仪,详细记录下了程序运行的点点滴滴. 慎重的选择记录哪些日志:在茫茫日志海中寻找真正记录问题的日志,你是不想经历的: 精心的定时压缩转移日志:故障发生了,日志却丢了,此时的 ...

  7. Python 基本类型转换

    python 有关字符串处理有哪些好用的方法?reverse len 字符串分割,合并?截取?查找? find index join split unicode字符串的表示 ""& ...

  8. Webpack+React+ES6入门指南[转]

    React无疑是今年最火的前端框架,github上的star直逼30,000,基于React的React Native的star也直逼20,000.有了React,组件化似乎不再步履蹒跚,有了Reac ...

  9. 【读书笔记《Android游戏编程之从零开始》】19.游戏开发基础(游戏音乐与音效)

    在一款游戏中,除了华丽的界面 UI 直接吸引玩家外,另外重要的就是游戏的背景音乐与音效:合适的背景音乐以及精彩的音效搭配会令整个游戏上升一个档次. 在 Android 中.常用于播放游戏背景音乐的类是 ...

  10. Android学习----自适应国际化语言

    [前言] 自适应的知识与编程无关,关键在于配置文件的修改.自适应的内容包括:语言.屏幕.平台.今天就来说一下如何自适应国际化言. internationalization (国际化)简称:i18n,因 ...