美文网首页
linux系统API,c,c++的标准I/O和文件I/O

linux系统API,c,c++的标准I/O和文件I/O

作者: FakeCSer爱去网吧 | 来源:发表于2020-07-19 09:46 被阅读0次
    • 标准I/O:数据从内存与标准i/o设备(stdio,stdout,stderr)之间的数据流动
    • 文件I/O:文件的读写

    linux系统API

    • open(),read(),write(),close(),lseek()

    C

    • 头文件<stdio.h>:标准输入输出,从stdio,stdout,stderr的读和写
      • scanf和printf:格式化输入输出
      • getchar()和putchar():读写一个字符
      • gets()和puts():读写一个字符串
    • 文件io:
      1. 打开文件
        FILE *fopen( const char * filename, const char * mode );
        mode:r/w/a/r+/w+/a+ 或者rb/wb/ab/r+b/w+b/a+b (二进制)

      2. 读写文件

        • fputc和fgetc
          int fputc( int c, FILE *fp );
          int fgetc( FILE * fp );

        • fputs和fgets 字符串读写函数
          int fputs( const char *s, FILE *fp );
          char *fgets( char *buf, int n, FILE *fp );读n个字符进缓冲区,或者读一行,或者读到文章末尾(读到换行符或EOF停止)

        • fread fwrite 数据块读写函数(二进制IO)
          size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);
          size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);

        • fgets与fread区别

        • fgets,fputs/fread.fwrite/fscanf,fprintf区别和用法

        • fread与系统调用read的区别:fread是c库函数,封装了read,加了缓冲区,效率高。

      3. 关闭文件 int fclose( FILE *fp );

      4. 读写指针的移动 fseek()
        int fseek(FILE *stream, long int offset, int whence)
        whence:
        SEEK_SET 文件的开头
        SEEK_CUR 文件指针的当前位置
        SEEK_END 文件的末尾


    C++

    • 两个头文件<iostream>和<fstream>,一个负责标准io一个负责文件io
    • <iostream>:该文件定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。其实就是对应着stdin,stdout,stderr。然后用<<,>>流插入运算符来对标准io进行输入输出
    • <fstream>:它定义了三个新的数据类型:ofstream,ifstream,fstream
      • ofstream:输出文件流,用于创建文件并向文件写入信息。
      • ifstream:输入文件流,用于从文件读取信息。
      • fstream:文件流,输入和输出

    文件流对象定义fstream f;->打开文件f.open()->读/写->文件关闭f.close()

    • 一个是cout << buf;一个是f << buf;一个是标准io流与内存之间的数据流动,一个是文件流与内存之间的数据流动。不过文件IO需要先声明文件流对象f,f.open()之后才能用.
    • c++中的文件指针位置
      • istream 的 seekg("seek get")
      • ostream 的 seekp("seek put")
    fileObject.seekg( n );
     
    // 把文件的读指针从 fileObject 当前位置向后移 n 个字节
    fileObject.seekg( n, ios::cur );
     
    // 把文件的读指针从 fileObject 末尾往回移 n 个字节
    fileObject.seekg( n, ios::end );
     
    // 定位到 fileObject 的末尾
    fileObject.seekg( 0, ios::end );

    相关文章

      网友评论

          本文标题:linux系统API,c,c++的标准I/O和文件I/O

          本文链接:https://www.haomeiwen.com/subject/scqlkktx.html