标准IO----简单使用

标准IO

  • 出现的原因:C语言标准委员会,为了统一编程接口
  • Linux:y一切皆文件
  • 标准IO为了减少磁盘的损耗,减少读写次数,对文件分配了输入输出两个缓冲区,struct FILE
  • 缓冲区的大小(setbuf()设置):
    • 全缓冲:默认情况
    • 行缓冲:printf()
    • 无缓冲:perror()

1 函数接口:

1.1 打开—->fopen()

#include <stdio.h>
FILE *fopen(const char *path, const char *mode);
FILE *fdopen(int fd, const char *mode);
FILE *freopen(const char *path, const char *mode, FILE *stream);
  • FILE *fopen(const char *path, const char *mode);
    • path: 要打开的文件;
    • mode: 以什么方式打开;
      • r 以只读方式打开,如果没有该文件,则会报错,打开后,读指针在文件开头。
      • r+ 以读写方式打开,其他与r方式相同。
      • w 以只写方式打开,如果文件没有,则新创建。如果有,则会把原来内容清空,写指针在文件开头。
      • w+ 以读写方式打开,其他与w相同
      • a append的简写,追加打开,文件不存在,则创建。 打开后,读写指针在文件尾部
      • a+ 与a相同,读指针在开头,写指针在尾部。
    • 返回值:
      • 正确:指向你打开的文件的FILE结构。
      • 错误,NULL
    • 下面三个文件系统会自动打开,直接用就可以:
      • FILE *stdin
      • FILE *stdout
      • FILE *stderr

1.2 关闭—->fclose()

  • int fclose(FILE *fp);
    • fp:前面用fopen打开的返回值

1.3 文件的读写

  • size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
    • ptr: 从stream文件里读到的信息存放到ptr为首地址的地方
    • size:读数据的单位
    • nmemb:读多少个上面的单位
    • stream:从哪里读
    • 返回值:真正读到多少个单位,而不是字节数!!!!
    • 件stream的读指针向移动(返回值*单位大小)个字节
  • size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
    • ptr: 要将ptr为首地址的数据写入到stream文件
    • size:要写数据的单位
    • nmemb:写多少个上面的单位
    • stream:写到哪里去
    • 返回值:真正读到多少单位
    • 文件stream的读指针向移动(返回值*单位大小)个字节
  • int fgetc(FILE *stream);
    • fuction:从文件中读取一个字符
    • return:字符的ASCII
    • 读指针:读出一个字符后,读指针自动往后跳一个
  • int fputc(int c, FILE *stream);
    • function:往文件中写一个字符
  • char *fgets(char *s, int size, FILE *stream);
    • function:从stream流读的数据存放的位置。
    • size:要读的大小
    • stream:打开的文件
    • 返回:fgets读完了数据后,会自动在s的尾部加换行符\n,会将stream的读指针挪到第二行
    • 不会忽略空格
  • int fputs(const char *s, FILE *stream);
    • function:网文件中写一个字符

1.4 判断文件是否结束feof()

  • if/while(feof(fp)) 如果fp结束为真
  • if/while(!feof(fp)) 如果fp没结束为真
  • feof不太稳定,已经结束了,判断没结束

1.5 格式化

  • int fscanf(FILE *stream, const char *format, …);
    • function:从stream里按format的格式读出数据
    • …:若干个读出来的数据项地址
    • 返回值:真正读出的数据项的个数
  • int sscanf(const char *str, const char *format, …);
    • function:从str这个字符串中读数据
  • int fprintf(FILE *stream, const char *format, …);
    • 将…的数据按format格式写入到文件stream中,不过这个函数不安全,容易越界
  • int snprintf(char *str, size_t size, const char *format, …);
    • function:同上
    • size:最多写多少个字符

1.6 冲洗函数

  • int fflush(FILE *stream);
    • 如果stream是输入流,则丢弃stream的缓冲区

1.7 定位函数

  • int fseek(FILE *stream, long offset, int whence);
  • long ftell(FILE *stream);
  • void rewind(FILE *stream);
  • int fgetpos(FILE *stream, fpos_t *pos);
  • int fsetpos(FILE *stream, const fpos_t *pos);

猜你喜欢

转载自blog.csdn.net/qq_36337149/article/details/81036483