标准I/O库
流和FILE对象:
    所有I/O函数都是围绕文件描述符的。当打开一个文件时,即返回一个文件描述符,然后该文件描述符就用于后续的I/O操作。当用标准I/O库打开或者创建一个文件时,我们已使得一个文件与流关联。
    流的定向:决定了所读、写的字符是单字节还是多字节(宽)字符集。
    freopen函数清楚一个流的定向;fwide函数可设置流的定向(返回+ : 宽定向   -:字节定向   0:未定向)。

缓冲:
    标准I/O库提供缓存的目的是尽可能的减少使用能够read和write的次数。
    (1)全缓存。当缓冲区满时,可以调用flush冲洗函数来将缓存的文件写入磁盘上。
    (2)行缓冲。当在输入或输出中遇到了换行符,执行行缓冲。
    (3)不带缓冲。标准错误流stderr通常是不带缓冲的,使得错误信息可以尽快的显示出来。
    系统默认全缓冲,终端设备行缓冲。
    
打开流:
    fopen函数打开路径名pathname的一个指定的文件。
    freopen函数在一个指定的流上打开一个指定的文件,如该流已经打开,则先关闭流。如若该流已经定向,则使用freopen清楚该定向。
    fdopen函数取一个已有的文件描述符,并使一个标准的I/O流与该描述符相结合。
    
每次一行I/O:
    读入:
    fgets和gets两个函数都指定了缓冲区的地址,读入的行将送入其中。gets从标准输入读,而fgets从指定的流读。
    char *fgets(char *restrict buf, int n, FILE *restrict fp):必须指定缓冲长度n。函数一直督导下一个换行符为止,但是不超过n-1个字符。、
        如超过字符限制将会下次继续读取该行。
    gets:函数不安全的原因在于没有制定缓冲区大小,可能导致缓冲区溢出。这种缺陷曾被利用,造成1988年的因特网蠕虫时间。
          gets不将换行符放入缓冲区。
    输出:
        puts和fputs。

二进制I/O:
    进行二进制I/O操作,我们更愿意一次读写一个完整的结构。如果使用getc或putc读、写一个结构那么必须循环通过整个结构,每次循环处理一个字节。一次读或者写一个字节。如果使用fputs和fgets那么因为fputs在遇到null字节停止,而在结构中可能包含null字节或换行符,则fgets也不能正常工作。因此,提出了执行二进制I/O操作的两种函数:
    fread:
    fwrite:
    (1)读写一个二进制数组。例如,将一个浮点数组的第2-5个元素写到一文见上。
        float data[10];
        if (fwrite(&data[2], sizeof(float), 4, fp) != 4)
            err_sys("fwrite error");
    (2)读写一个结构。
        struct{
            short  count;
        }item;
        if(fwrite(&item, sizeof(item), 1, fp) != 1)
            err_sys("fwrite error");

定位流:
    存储文件的位置以及文件的偏移量。
    
格式化I/O:
    printf将格式化数据输出到标准输出;
    fprintf将格式化数据输出到指定的流;
    dprintf写至指定的文件描述符;
    sprintf将格式化的字符送入数组buf,可能会造成缓冲区溢出。
    snprintf缓冲区长度是一个显示参数。
    
临时文件:
    tmpnam:函数产生一个与现有文件名不同的一个优先路径名字符串。每次调用它,都会产生一个不同的路径名,最多调用次数TMP_MAX。
    tmpfile:创建一个临时二进制文件(类型wb+),在关闭该文件或程序结束时将自动删除这种文件。
    mkdtemp:创建一个目录
    mkstemp:创建一个文件 不会自动删除 如果希望从文件系统空间中删除,必须自己对它解除链接。

内存流:
    标准I/O库把数据缓存在内存中。我们也可以通过调用setbuf和setvbuf函数让I/O库使用我们自己的缓冲区。
    
注解:
    restrict:C语言中的一种类型限定符。告诉编译器,对象已经被指针引用,不能通过该指针外其他直接或间接方式修改该对象的内容。

UNIX环境高级编程--5的更多相关文章

  1. (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  2. multiple definition of `err_sys' 《UNIX环境高级编程》

    本文地址:http://www.cnblogs.com/yhLinux/p/4079930.html 问题描述: [点击此处直接看解决方案] 在练习<UNIX环境高级编程>APUE程序清单 ...

  3. unix环境高级编程基础知识之第二篇(3)

    看了unix环境高级编程第三章,把代码也都自己敲了一遍,另主要讲解了一些IO函数,read/write/fseek/fcntl:这里主要是c函数,比较容易,看多了就熟悉了.对fcntl函数讲解比较到位 ...

  4. (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  5. (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  6. (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  7. (四) 一起学 Unix 环境高级编程(APUE) 之 系统数据文件和信息

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  8. (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  9. (六) 一起学 Unix 环境高级编程 (APUE) 之 进程控制

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  10. (七) 一起学 Unix 环境高级编程(APUE) 之 进程关系 和 守护进程

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

随机推荐

  1. 洛谷 1823 [COI2007] Patrik 音乐会的等待

    [题解] 维护一个单调栈即可. 但是因为有相同身高的存在,所以要稍微考虑下相同身高的处理.因为这个卡了一下下QAQ... #include<cstdio> #include<algo ...

  2. 2.8 补充:export

    linux export 的作用   功能说明:设置或显示环境变量.   语 法:export [-fnp][变量名称]=[变量设置值]   补充说明:在shell中执行程序时,shell会提供一组环 ...

  3. nginx+keepalived+consul 实现高可用集群

    继 负载均衡 之 nginx+consul+consul template,我这次将使用2台虚拟机,来做一个简单的双机负载均衡试验. 试验目标: 1. 当参加负载均衡的子节点服务,有任何其中一个或多个 ...

  4. 【Codeforces 977F】Consecutive Subsequence

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 设f[i]表示i作为序列的最后一个数字,最长的连续序列的长度. 用f[i]和f[i-1]+1来转移即可 [代码] import java.io ...

  5. java之比较两个日期大小----https://blog.csdn.net/dongfangbaiyun/article/details/51225469

    https://blog.csdn.net/dongfangbaiyun/article/details/51225469 java之比较两个日期大小 最近又用到两个日期大小的比较,因此记录在此,方便 ...

  6. HDU 1212 大整数的取模运算

    因为这里是MOD最大为100000 所以我将字符串看作5个一组,并记录后面跟了多少个100000 每次取5个数根据其数据进行取模更新 注意过程中 100000*100000会超int #include ...

  7. poj 2420 模拟退火法基础

    /* 题意:给n个电脑,求一个点到这n个电脑的距离和最小. 模拟退火法:和poj1379的方法类似 因为坐标范围是0-10000 不妨把它看成是10000*10000的正方形来做 */ #includ ...

  8. Java使用JNative调用DLL库

    编写测试DLL文件,源文件参照JNA调用用的DLL文件.地址:http://www.cnblogs.com/vevy/p/9076941.html (很重要)右键项目 --> 属性 --> ...

  9. AI小记-K近邻算法

    K近邻算法和其他机器学习模型比,有个特点:即非参数化的局部模型. 其他机器学习模型一般都是基于训练数据,得出一般性知识,这些知识的表现是一个全局性模型的结构和参数.模型你和好了后,不再依赖训练数据,直 ...

  10. WAMP 2.5 &quot;FORBIDDEN&quot; error

    对于web开发人员来说.远程訪问站点能够非常方便的提高开发站点开发效率,那么在wamp环境下,默认仅仅支持本地訪问,那么怎样訪问开启远程站点訪问呢? 开启方法: wamp2.5(32bit) 集成环境 ...