zoukankan      html  css  js  c++  java
  • 标准IO函数以及基本知识点总结

    什么是标准IO呢?有哪些特点?

    标准IO是标准c库提供的对文件操作的函数接口。他的特点是:1 带缓存,2 大部分都调用系统接口函数实现。(c库就是一种实现好的函数接口,作用是屏蔽下层细节。提供上层接口。提高移植性)

    我们都知道标准IO是带有缓存的,那么缓存分为几种呢?

    1>全缓存:

    有4096byte,截止条件有三,一是缓存满的时候,二是调用fflush的时候,三是进程正常结束的时候

    2>行缓存:

    有1024byte,它与全缓存截止的条件最大的差异就是另外遇到' '的时候。

    3>不缓存:

    0byte。每次都是直接调用系统接口。

    那么说道标准IO就一定要提到   流   了,什么是流?

    流 就是将要操作文件的地址,对一个文件操作,首先肯定要打开一个文件,所以流就是在调用fopen函数时所返回的分配内存的首地址。当然也就是将操作文件的地址。

    标准IO的几个经常使用函数:

    1》fopen()

    函数原型 FILE *fopen(const char *path,const char *mode);

    当中,path是我们要打开的流,而mode就是我们打开文件的方式了,也就决定你所打开的文件将被如何的去对待啦,有例如以下几种方式:

    "r":仅仅读方式打开,打开的文件必须存在。

    "r+"  :读写方式打开,文件必须存在。

    "w" : 仅仅写方式打开,文件不存在则创建。文件存在则清空。

    "w+" : 读写方式打开,文件不存在则创建,文件存在则清空。

    "a" :  仅仅写方式打开,追加的方式写到文件的尾部。文件不存在则创建。

    "a+": 读写方式打开,文件不存在创建,从头開始读,从尾開始写。

    以上就是经常使用的fopen的打开方式,这个必须尽量的熟记于心,才干挥斥方遒。游刃有余(诗性大发了)。。。

    2》单个字符的读写函数fgetc()   fputc()

    int fgetc(FILE *stream)   

    函数功能:从指定的流中读取一个字符。 成功返回读取的字符,读到文件结尾或者失败则返回EOF(-1)

    这里面须要注意的就是,返回的数值是整形的。想想为什么呢? 呵呵 。。想不通的留言给我哈O(∩_∩)O哈。

    int fputc(int c,FILE* stream)

    函数功能: 向指定的流中写入一个字符。成功返回写入的字符,失败返回EOF.


    3>多个字符的读写函数fgets()  fputs()

    char * fgets(char *s,int size,FILE *stream)  

    函数功能:从流中最多读取size-1个字符到s保存的地址,成功返回读入字符串的地址。失败或读到文件的尾部则返回NULL,为什么最多读取  size -1 个字符呢?  首先fgets函数遇到换行符的时候就会自己主动停止,所以我们也能够利用这一点,来统计文件的行数。另外每次读取结束的时候,会自己主动的在字符的后面加上一个'',这就是问题的答案。你造吗?

    int fputs( const char *s,FILE*stream)

       函数功能: 将一个字符串写入文件,s为字符串的首地址,stream为将要写进去的文件。成功则返回写入字符的个数,失败返回-1 ,   他的特点是 将字符串写入文件的时候,遇到‘' ,字符则结束。


    4》fread()  fwrite()

    size_t  fread(void *ptr,size_t size,size_t  nmemb,FILE*stream)

    功能:从一个指定的流中读取nmemb个对象,每一个对象的大小事size个字节。成功返回读取实际对象的个数(nmemb)  。   失败返回0.

      size_t fwrite(const  void  *ptr ,size_t  size,size_t  nmemb , FILE*stream)

    功能:向一个指定的流中写nmemb个对象。



    另外,当我们在读或者写文件的时候。内核中的文件表项中会存在有offset值,它的值记录的是对文件对应操作的位置。位置非常重要的。比方你对一个文件 读或写之后。然后对文件開始写或读,你假设在这个中间没有更新你的offset值。或导致你的操作得不到你终于想要到那个结果。所以offset的值至关重要。在程序中我们能够使用fseek这个函数来实施对offset值得改动设定,

    int fseek ( FILE*stream,long offset,int whence)

    功能:实现文件定位,更改内核中文件表项offset的值,成功返回0。失败返回-1.

    long offset 来设定偏移量,正数代表向后偏移。负号则向前偏移,whence有三个值:SEEK_SET表示从头開始,SEEK_CUR表示从当前的位置。SEEK_END表示从尾部開始。


    另外再加入一个:


    文件描写叙述符:

    文件描写叙述符是由无符号整数表示的。进程用它来标示打开的文件,内核利用文件描写叙述符来訪问文件,打开现存文件或新建文件时,内核会返回一个文件描写叙述符,读写文件也须要使用文件描写叙述符来指定待写的文件。

    通常。标准输入的文件描写叙述符是 0 。标准输出的文件描写叙述符是1 ,标准出错的文件描写叙述符是2,接下来假设再打开文件的时候。文件描写叙述符的分配原则就是未使用的最小的数字。

    依据传说:

    基于文件描写叙述符的操作是linux中最经常使用的操作之中的一个

         

  • 相关阅读:
    运维相关
    五指MUD协议
    android 超简单的拖动按钮 悬浮按钮 吸附按钮 浮动按钮
    find_player 不查找已经晕到玩家的问题
    练英语资源
    Java泛型
    JAVA WEB开放中的编码问题
    PHP初中高级学习在线文档下载
    springmvc请求参数获取的几种方法
    游戏数值——LOL篇 以LOL为起点-说游戏数值设计核心思路
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/6841522.html
Copyright © 2011-2022 走看看