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. mysql登录和连接 权限

    在一些配置中会要求登录mysql 授权的时候注意ip地址是ip地址,localhost是localhost,在grant授权时,如果用localhost,就必须在所登录的配置文件中使用localhos ...

  2. Effective Java 68 Prefer executors and tasks to threads

    Principle The general mechanism for executing tasks is the executor service. If you think in terms o ...

  3. Effective Java 78 Consider serialization proxies instead of serialized instances

    Serialization proxy pattern private static nested class (has a single constructor whose parameter ty ...

  4. 深入掌握Java中的enum

    对于要在程序中要表示有限种类的某事物,一般我们可以采用两种方式,一是使用:public static final String 常量:二是使用enum来表示.一般而言前者简单,但是不能够很好的提供更多 ...

  5. redis客户端--jedis

    一.jedis jedis 是 redis推荐的java客户端.通过Jedis我们可以很方便地使用java代码的方式,对redis进行操作.jedis使用起来比较简单,它的操作方法与redis命令相类 ...

  6. ASP.NET中常用的几个李天平开源公共类LTP.Common,Maticsoft.DBUtility,LtpPageControl (转)

    ASP.NET中常用的几个开源公共类: LTP.Common.dll: 通用函数类库     源码下载Maticsoft.DBUtility.dll 数据访问类库组件     源码下载LtpPageC ...

  7. C/C++ 位域

    //假设硬件平台是intel x86(little endian) typedef unsigned int uint32_t; void inet_ntoa(uint32_t in) { ]; re ...

  8. SpringMVC接收参数的注解笔记

    1.@RequestParam var param = {}; param.keys = delKeys.join();//delKeys是数组,如delKeys=['a',b','c'],join函 ...

  9. Gnome创建桌面快捷方式

    Ctrl+Alt+T打开终端 输入gnome-desktop-item-edit 桌面/ --create-new (注: 桌面/ 要改为你桌面文件夹所在路径) 配置快捷方式属性,在“命令(A)”这行 ...

  10. Fast RCNN 训练自己数据集 (1编译配置)

    FastRCNN 训练自己数据集 (1编译配置) 转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ https:/ ...