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. Sql server存储过程中常见游标循环用法

    用游标,和WHILE可以遍历您的查询中的每一条记录并将要求的字段传给变量进行相应的处理 DECLARE ), ), @A3 INT DECLARE YOUCURNAME CURSOR FOR SELE ...

  2. Effective Java 20 Prefer class hierarchies to tagged classes

    Disadvantage of tagged classes 1. Verbose (each instance has unnecessary irrelevant fields). 2. Erro ...

  3. 关于nginx的限速模块

    nginx 使用 ngx_http_limit_req_module和ngx_http_limit_conn_module 来限制对资源的请求 这种方法,对于CC攻击(Challenge Collap ...

  4. 软件测试作业3--Junit、hamcrest、eclemmat的安装和使用

    1.   how to install junit, hamcrest and eclemma? 首先下载下来Junit和Hamcrest的jar包,然后新建项目的时候将这两个jar包导入到工程里面就 ...

  5. 初试cocos2d-x坐标系

    bool HelloWorld::init() { ////////////////////////////// if ( !Layer::init() ) { return false; } Siz ...

  6. c++基础回顾

    #include <iostream> #include <vector> #include <string> int main(int argc, const c ...

  7. php 利用activeMq+stomp实现消息队列

    php 利用activeMq+stomp实现消息队列 一.activeMq概述 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J ...

  8. PHP使用CURL实现对带有验证码的网站进行模拟登录的方法

    网上的很多模拟登录程序,大都是通过服务程序apache之类的运行,获取到验证码之后显示在网页上,然后填上再POST出去,这样虽然看起来很友 好,但是既然模拟登录,登录后所干的事情就不一定是短时间完成的 ...

  9. 《TCP/IP详解 卷一》读书笔记-----TCP persist &Keeplive timer

    1.persist timer:当接收方建议的窗口大小为0时,发送方就会停止发送,直到接收方有缓存空间时再用一个窗口值非零的ACK提示发送方可以继续发送.但是这个称为window update的ACK ...

  10. 孙鑫视频学习:对第10章设置线宽时为什么不调用UpDateData(TRUE)的理解

    在第10章10.2.1小节中,首先分别对视图类和对话框类添加了一个名为m_nLineWidth的int型变量,再将用户在CSetting dlg对话框的edit控件中输入的线宽值记录在dlg.m_nL ...