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

  • 标准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 );
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容