zoukankan      html  css  js  c++  java
  • Istream中的函数

    Istream中的函数_刻卜浪兴_新浪博客

    Istream中的函数
    (2011-12-30 16:06:38)
    转载▼
    标签:
    杂谈
       

    Istream中一些非常用但很有用的函数。

     

    我们常使用>>, getline(),但是其实istream这个类型是提供了很多的其他很有用的函数。

     

    我们知道使IO行为成为一种流的方式最本质的特征就是模拟数据向水一样从一个地方流像另外一个地方,所以我们使用>>, getline()操作的时候,就好像前面被操作的数据没有了。其实像istream这样的对象时刻维护着一个指针(streampos),它一般随着对该流的操作而变动,这样就给我们提供了向流水一样的数据传输,但实际上只是有个指针在作用而已。

     

    有了这个概念我们就知道了,在IOstream library中,有streamoff,streampos,streamsize,这样的int类型的类型来特别表达有关流的当前操作位置以及长度问题。然后我们知道我们可以通过这些对象给与的一些函数做一些相应的我们要做的是,改变流当前位置。

     

    (1)Streamsize  gcount(),返回前一次操作的长度。

    (2)取得相应个数的字符

    int get();一个字符

    istream& get ( char& c );一个字符,存储在c中,返回已经移动了的istream

    istream& get ( char* s, streamsize n );n字符,结束字符\n(结束字符不会被取出。

    istream& get ( char* s, streamsize n, char delim );结束字符delim

    istream& get ( streambuf& sb);

    istream& get ( streambuf& sb, char delim );

    (3)

    istream& getline (char* s, streamsize n );

    istream& getline (char* s, streamsize n, char delim );

     

    (4)去除n字符(取出,丢弃)

    istream&  ignore ( streamsize n = 1, int delim = EOF );

    (5)

    int peek ( );

    与get不同在于streampos不会发生变化。

    (6)退回一个stream指针streampos

    istream& putback ( char c );

    istream& unget ( );

    (7)读n个字符,(与get的区别)。

    istream& read ( char* s, streamsize n );

    streamsize readsome ( char* s, streamsize n );

    (8)设置streampos

    istream& seekg ( streampos pos );

    istream& seekg ( streamoff off, ios_base::seekdir dir );

    value
       

    offset is relative to...

    ios_base::beg
       

    beginning of the stream buffer

    ios_base::cur
       

    current position in the stream buffer

    ios_base::end
       

    end of the stream buffer

    (9)返回当前streampos常用来,计算长度。

    streampos tellg ( );

    (10)int sync ( );

     

     

    可以看出,只有>>, get, read, getline(),这样的函数用于流数据,peek也是只是get pointer不会变。

     

    操作get pointer的有gcount(),ignore,putback,unget,seekg,tellg。

    对应istream,ostream也有一类函数共使用。

     

    (1)       put(对应于get)

    ostream& put ( char c );

    注意在输出流中,那个位置指针时put point。指针指向的是输出目的文件接受字符的开始位置,要不然会将前面的字符覆盖。

    (2)  write(对应于read)

    ostream& write ( const char* s , streamsize n );

    write没有那么丰富的重载,这表明从一个文件复制数据到另外一个文件只能使用字符数做中间转接。

    (3)  seekp,tellp,(对应seekg,tellg)g表示get,p表示put。

    (4)  flush,特殊方法,将缓冲区中的数据写入目的流。

     

     

    如上所说的这些操作,集中在流的get pointer的操作。一句话,对流的操作不会真的将数据流走,只是get pointer的变动而以。

     

    输入输出流会有一个streambuf对象,这个东西非常重要,这些流数据的缓冲地,很多流操作都是以这个对象的操作为基础的!

     

     

     

     

    有人说cstdio,与iostream是对应的,对的,但是他们两之间只是从功能上对应的,实现的方法上确实相差太多了。

     

    Functions

    Operations on files:

    remove
       

    Remove file (function )

    rename
       

    Rename file (function )

    tmpfile
       

    Open a temporary file (function)

    tmpnam
       

    Generate temporary filename (function)


    File access:

    fclose
       

    Close file (function)

    fflush
       

    Flush stream (function)

    fopen
       

    Open file (function )

    freopen
       

    Reopen stream with different file or mode (function )

    setbuf
       

    Set stream buffer (function )

    setvbuf
       

    Change stream buffering (function )


    Formatted input/output:

    fprintf
       

    Write formatted output to stream (function)

    fscanf
       

    Read formatted data from stream (function )

    printf
       

    Print formatted data to stdout (function )

    scanf
       

    Read formatted data from stdin (function )

    sprintf
       

    Write formatted data to string (function)

    sscanf
       

    Read formatted data from string (function )

    vfprintf
       

    Write formatted variable argument list to stream (function)

    vprintf
       

    Print formatted variable argument list to stdout (function)

    vsprintf
       

    Print formatted variable argument list to string (function)


    Character input/output:

    fgetc
       

    Get character from stream (function)

    fgets
       

    Get string from stream (function )

    fputc
       

    Write character to stream (function)

    fputs
       

    Write string to stream (function)

    getc
       

    Get character from stream (function)

    getchar
       

    Get character from stdin (function)

    gets
       

    Get string from stdin (function )

    putc
       

    Write character to stream (function)

    putchar
       

    Write character to stdout (function)

    puts
       

    Write string to stdout (function)

    ungetc
       

    Unget character from stream (function)


    Direct input/output:

    fread
       

    Read block of data from stream (function)

    fwrite
       

    Write block of data to stream (function)


    File positioning:

    fgetpos
       

    Get current position in stream (function)

    fseek
       

    Reposition stream position indicator (function)

    fsetpos
       

    Set position indicator of stream (function)

    ftell
       

    Get current position in stream (function)

    rewind
       

    Set position indicator to the beginning (function)


    Error-handling:

    clearerr
       

    Clear error indicators (function)

    feof
       

    Check End-of-File indicator (function)

    ferror
       

    Check error indicator (function)

    perror
       

    Print error message (function)

     

    Macros

    EOF
       

    End-of-File (constant)

    FILENAME_MAX
       

    Maximum length of file names (constant)

    NULL
       

    Null pointer (constant)

    TMP_MAX
       

    Number of temporary files (constant)

    And also _IOFBF, _IOLBF, _IONBF, BUFSIZ, FOPEN_MAX, L_tmpnam, SEEK_CUR, SEEK_END and SEEK_SET, each described with its corresponding function.

    Types

    FILE
       

    Object containing information to control a stream (type )

    fpos_t
       

    Object containing information to specify a position within a file (type)

    size_t
       

    Unsigned integral type (type)

     

    可以看到,在C中由于没有类的概念,顶多只有type,于是所有的方法都是纯方法,并没有类对象的依托,这是cstdio,与iostream.fstream.sstream之间的区别。

    不过,cstdio仍然为我们提供了一些非常有用和底层的函数。

     

     

     

     (1)前面介绍iostream时我们说再C IO中,只有对设备和文件的两种IO。是的。于是首先操作文件是cstdio的一个很大部分的功能,这里操作文件与使用流的方式读文件的数据无关。

    包括删除、新建、重命名等等。

    (2)格式化输入输出printf,scanf这样的函数则是我们常见的一种输入输入方法,格式一词体现了他们与纯输入输出(只是将数据都出来,以字节为单位)。

    Printf,sanf这样这是一个特殊的专门用于给stdin和stdout输入输出。

    Fprintf,fsanf这样的则是为一般的刘进行输入输出的。

    Sprint,ssanf这样的这时面向字符串的输入输出(或许这里就是C++建立string流的灵感)。

    还有vfprintf,vspintf,vprintf。这样的可以写一个列表的。

    (3)除了上面对各种类型数据的格式化输入输出,还有针对字符串输入输出。

    其中的函数基本与格式化输入输出对应。

     

    (4)非格式化的,也就是直接写读的方法fread,fwrite。

    这些方法其实都是针对文件的(文件包括设备),所以以stdio中以f开头的都是这一类,它们将文件看成一种流的格式(  不想C++那样需要特意声明出一个流对象)。

    (5)与C++中一样,流是一种错觉,只是安排了某种特殊的指使位置来做到这一点,在C++中这种指示叫着,get pointer,在C中叫着position。

    (6)与C++中流对象的三种状态(eof,bad,fail)以及状态操作对应,C中也有类似的方法来操作流的状态。

     
    分享: [分享到新浪Qing] 分享到新浪Qing

    0

    喜欢
    阅读(572)┊ 评论 (0)┊    收藏(0) ┊转载(0)    ┊ 喜欢▼ ┊打印┊举报
    已投稿到:    
    [排行榜] 排行榜 [圈子] 圈子   
    前一篇:Visual studio 和Visual C++
    后一篇:C++IO的讨论
  • 相关阅读:
    需要登陆网站后才能获取数据的页面爬取
    PTA中提交Python3程序的一些套路
    PAT 甲级 1014 Waiting in Line (30 分)(queue的使用,模拟题,有个大坑)
    PAT 甲级 1013 Battle Over Cities (25 分)(图的遍历,统计强连通分量个数,bfs,一遍就ac啦)
    PAT 甲级 1012 The Best Rank (25 分)(结构体排序)
    anconda + python 3.6安装(以前的anconda,anaconda和python版本对应关系)
    数学建模python matlab 编程(喷泉模拟)
    数学建模python matlab 编程(疾病传播模型)
    scikit-learn机器学习(四)使用决策树做分类,并画出决策树,随机森林对比
    scikit-learn机器学习(四)使用决策树做分类
  • 原文地址:https://www.cnblogs.com/lexus/p/2871668.html
Copyright © 2011-2022 走看看