标准io总结

头文件: #include <stdio.h>

1. 打开关闭流

   FILE *fopen(const char *path, const char *mode);
   功能: 打开路径名为path的指定文件。
   参数:
       mode: r, w, a, r+, w+, a+
   返回值: 若成功,返回文件指针;若出错,返回NULL。
	
   FILE *freopen(const char *path, const char *mode, FILE *stream);
   功能: 在指定的流上打开指定的文件,若该流已经打开,则先关闭该流。
		 此函数一般用于将一个指定的文件打开为一个预定义的流:标准输出,标准输入,标准出错。
   参数:
	   mode: r, w, a, r+, w+, a+
   返回值: 若成功,返回文件指针;若出错,返回NULL。
	
   FILE *fdopen(int fd, const char *mode);
   功能: 将流与现有文件描述符fd相关联。
		 此函数常用于由创建管道和网络通信通道函数返回的描述符,这些特殊类型的文件不能用fopen打开。
   参数:
       mode: r, w, a, r+, w+, a+
   返回值: 若成功,返回文件指针;若出错,返回NULL。
	
   int fclose(FILE *stream);
   功能: 关闭流
   返回值: 若成功,返回0;若出错,返回EOF。
	
2. 读写流
2.1 单字符io
   int getc(FILE *stream);
   int fgetc(FILE *stream);
   int getchar(void);
   返回值: 若成功,返回下一个字符;若到达文件尾端或出错,返回EOF。
      
   注意:getc可被实现为宏,而fgetc不能实现为宏。
	
   int feof(FILE *stream);
   int ferror(FILE *stream);
   返回值: 若条件为真,返回非0;否则,返回0 。
	
   void clearerr(FILE *stream);
   功能: 清除出错标志和文件结束标志。
	
   int fileno(FILE *stream);
   返回值: 返回与该流相关联的文件描述符。
	
   int ungetc(int c, FILE *stream);
   功能: 将字符压送回流中。
   返回值: 若成功,返回c;若出错,返回EOF。 
	
   int putc(int c, FILE *stream);
   int fputc(int c, FILE *stream);
   int putchar(int c);
   返回值: 若成功,返回c;若出错,返回EOF。
	
   注意:putc可被实现为宏,而fputc不能实现为宏。
       
2.2 每次一行io
   char *fgets(char *s, int size, FILE *stream)
   char *gets(char *s);
   返回值: 若成功,返回s;若到达文件尾端或出错,返回NULL。
	
   注意: gets删除换行符,fgets保留换行符。
	
   int fputs(const char *s, FILE *stream);
   int puts(const char *s);
   返回值: 若成功,返回非负值;若出错,返回EOF。
	
   注意: puts在输出结束后额外输出一个换行符,fgets不会。
	
2.3 二进制io 
   size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
   size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);         
   返回值: 读或写的对象数
	
   读或写一个二进制数组。将浮点数组的第2~5个元素写到文件上:
   float data[10];
   fwrite(&data[2], sizeof(float), 4, fp)
   其中,size为每个数组元素的长度,nmemb为欲写的元素个数。
	
2.4 格式化io
   int printf(const char *format, ...);
   int fprintf(FILE *stream, const char *format, ...);
   int dprintf(int fd, const char *format, ...);
   3个函数返回值,若成功,返回输出字符数,若出错,返回负值。
	
   int sprintf(char *str, const char *format, ...);
   int snprintf(char *str, size_t size, const char *format, ...);
   返回值: 若成功,返回存入数组的字符数;若出错,返回负值。
	
   功能: printf将格式化数据写到标准输出;fprintf写至指定流;dprintf写至指定的文件描述符。
	     sprintf将格式化的字符写入数组str中。

   头文件: #include <stdarg.h>
	
   int vprintf(const char *format, va_list ap);
   int vfprintf(FILE *stream, const char *format, va_list ap);
   int vdprintf(int fd, const char *format, va_list ap);
   int vsprintf(char *str, const char *format, va_list ap);
   int vsnprintf(char *str, size_t size, const char *format, va_list ap);
	
   功能: 类似于上面5个函数,将可变参数表替换成了ap。
	
   int scanf(const char *format, ...);
   int fscanf(FILE *stream, const char *format, ...);
   int sscanf(const char *str, const char *format, ...);
	
   返回值: 赋值的输入项数;若输入出错或在任一转换前已到达文件尾端,返回EOF。

   #include <stdarg.h>

   int vscanf(const char *format, va_list ap);
   int vsscanf(const char *str, const char *format, va_list ap);
   int vfscanf(FILE *stream, const char *format, va_list ap);
   功能: 类似于上面3个函数,将可变参数表替换成了ap。
	
3. 定位流
   long ftell(FILE *stream);
   返回值: 若成功,返回当前文件位置;若出错,返回-1L。
	
   int fseek(FILE *stream, long offset, int whence);
   参数:
	   whence: SEEK_SET,SEEK_CUR,SEEK_END
   返回值: 若成功,返回0;若出错,返回-1。
	
   void rewind(FILE *stream);
   功能: 将一个流设置到文件起始位置。
	
   off_t ftello(FILE *stream);
   返回值: 若成功,返回当前文件位置,若出错,返回off_t-1。
	
   int fseeko(FILE *stream, off_t offset, int whence);  
   返回值: 若成功,返回0;若出错,返回-1。
	
   int fgetpos(FILE *stream, fpos_t *pos);
   功能: 将文件位置指示器的当前值存入由pos执行的对象中。
   返回值: 若成功,返回0;若出错,返回非0。
	
   int fsetpos(FILE *stream, const fpos_t *pos);
   功能: 设置文件位置指示器的值为pos对象保存的值。
   返回值: 若成功,返回0;若出错,返回非0。
	
4. 内存流
   FILE *fmemopen(void *buf, size_t size, const char *mode);
   FILE *open_memstream(char **ptr, size_t *sizeloc);
   #include <wchar.h>
   FILE *open_wmemstream(wchar_t **ptr, size_t *sizeloc);
   返回值: 若成功,返回流指针;若出错,返回NULL。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值