• [unix]unix I/O知识


    0.UNIX输入输出基本概念

    Q1.程序与文件建立连接或通信有几种机制?流与文件描述字有什么区别?  Q2.打开文件的实质?

    打开文件就是程序与文件之间建立连接或通信。 

    流的类型是FILE;

    文件描述字的类型是int;

    流函数建立在文件描述字之上。

    1.标准I/O 【针对流】

    a. NULL

    b.流与FILE对象

    对于ASCII字符集,一个字符用一个字节表示。对于国际字符集,一个字符可用多个字节表示。

    流的定向决定了所,读写的字符是单字节还是多字节的。

    若在未定向的流上使用一个多字节I/O函数,则将该流的定向设置为宽定向的。

    若在未定向的流上使用一个单字节I/O函数,则将该流的定向设置为字节定向的。

    freopen()清除一个流的方向;fwide()设置流的定向,但并不改变已定向流的方向。

    c.打开与关闭流

    fopen() 打开一个指定的文件

    freopen() 在一个指定的流上打开一个指定的文件,如果该流已经打开,则先关闭该流。若该流已经定向,则freopen清除该定向。一般用于将一个指定的文件打开为一个预定义的流:标准输入,标准输出或标准出错。

    fdopen() 获取一个现有的文件描述符,并使一个标准的I/O流与该描述符相结合。 用于由创建管道和网络通信通道函数返回的描述符。

    标准I/O系统可以区分文本文件和二进制文件,但UNIX并不对这两种文件进行区分,所以UNIX系统环境下制定字符b作为type一部分实际没作用。

    流引用终端设备,则该流是行缓冲的; 否则系统默认情况,流被打开时是全缓冲的。

    fclose()

    进程正常终止时:

    d.读写流 {读的方式不同;写的方式不同}

    (1) 每次一个字符的I/O;getc(),fgetc(),getchar()

    (2) 每次一行    调用fgets()时,说明能处理的最大行长。gets()

    (3)直接I/O{二进制I/O}     fread()和fwrite(),每个对象具有指定的长度。从用于从二进制文件中每次读或写一个结构。

    e.文件定位

    (1)   ftell()和fseek()    V7就存在,文件位置存放在一个长整型中

    (2)   ftello()和fseeko()    Single UNIX Specifcation  ,使用off_t数据类型代替了长整型。

    (3)   fgetpos()和fsetpos()  ISO C 使用一个抽象的数据类型fpos_t记录文件的位置

    需要移植到非UNIX系统上运行的应用程序应当使用fgetpos和fsetpos.

    对于非UNIX环境,二进制文件和文本文件的偏移量位置的计算。

    f.文件结束和错误指示器

    g.流缓冲 {全缓冲,行缓冲,不带缓冲}

    h.格式I/O {格式输入;格式输出}

    i.临时文件

    Q 一般暂存什么数据?有什么特点?应用场景?相关函数{tmpnam(), tempnam(), tmpfile()}?函数使用举例?

    j.其它:

    {ESPIP错误};

    FILE结构体 [include/linux/fs.h]; 

    Q 文件位置起什么作用? 为什么fgets()是危险的函数?读回退?

    Q.用setvbuf实现setbuf; printf返回0值意味着什么?;

    2.低级I/O 【针对描述字】

    b1.read()和write()函数;b2.readv()和writev()函数

    c.文件位置

    d.文件复制 dup()和dup2()

    e.fdopen()和fileno()

    f.fcntl()

    g.非阻塞I/O   {想到了周五看UNP的I/O模型}

    阻塞I/O :调用必须等到操作完成,即读写到数据,才能返回。

    h.fsync()和fdatasync()函数

    3.终端I/O
    http://blog.csdn.net/wubin1124/article/details/5155864
    Q1.为何引入终端I/O
    Q2.终端I/O概述,分为几种类型
    ?使用GTI提供的终端I/O控制函数改变终端的默认设置

    4.高级I/O

    参考:APUE;  《UNIX/Linux程序设计教程》;

    /*wolflion(天行)整理,转载注明出处*/  2013.3.17 version1.0

  • 相关阅读:
    java JSONObject
    android 8.0 悬浮窗 最简demo
    使用adb 命令(atrace)抓起systrace的方法。
    使用python处理selenium中的获取元素属性
    使用adb/Linux获取网关ip
    Requests text乱码
    python-uiautomator2
    adb命令 判断锁屏
    缓存穿透、缓存击穿与缓存雪崩
    ReentrantLock重入锁详解
  • 原文地址:https://www.cnblogs.com/wolflion/p/2965194.html
Copyright © 2020-2023  润新知