1.缓冲函数
#include <stdio.h>
int fflush(FILE *fp);
该函数使该流所有未写的数据都被传送至内核。
函数成功返回0;函数失败返回-1。
2.打开流函数
#include <stdio.h>
FILE *fopen(const char *restrict pathname, const char *restrict type);
该函数打开一个指定文件。
函数成功返回文件指针;函数失败,返回NULL
#include <stdio.h>
int fclose(FILE *fp);
该函数关闭一个打开流。
函数成功返回0;函数失败,返回EOF。
3.读写流(每次一个字符)
#include <stdio.h>
int getc(FILE *fp);
int fgetc(FILE *fp);
函数可用于一次读一个字符。
函数成功,返回下一个字符;函数失败返回EOF。
注意:1.fgetc可以得到其地址,所以允许将fgetc的地址作为一个参数传送给另一个函数;
2.getc可被实现为一个宏,所以调用fgetc所需时间可能比调用getc时间长。
#include <stdio.h>
int ferror(FILE *fp);
int feof(FILE *fp);
函数用于判断文件出错还是到达文件尾端。
若函数出错或到达文件尾端,返回非0;否则,返回0。
#include <stdio.h>
int putc(int c, FILE *fp);
int fputc(int c, FILE *fp);
输出函数。
函数成功,返回c;函数失败,返回EOF。
4.读写流(每次一行I/O)
#include <stdio.h>
char *fgets(char *restrict buf, int n, FILE *restrict fp);
char *gets(char *buf);
对于fgets,必须指定缓冲长度n。此函数一直读到下一个换行符为止,但是不超过n-1个字符。读入字符被送入缓冲区,该缓冲区以null字节结尾。
gets不推荐使用,因为不能指定缓冲区长度,容易导致缓冲区溢出。(若该行长于缓冲区长度,会产生不可预料后果。如1988年的因特网蠕虫事件)
该函数每次读取一行。成功返回buf;失败返回NULL。
#include <stdio.h>
int fputs(const char *restrict str, FILE *restrict fp);
int puts(const char *str);
函数成功返回非负值;函数失败返回EOF。
5.格式化I/O
#include <stdio.h>
int printf(const char *restrict format, ...);
int fprintf(FILE *restrict fp, const char *restrict format, ...);
int dprintf(int fd, const char *restrict format, ...);
int sprintf(char *restrict buf, const char *restrict format, ...);
printf把数据写到标准输出上;fprintf写至指定流;dprintf写至指定文件描述符;sprintf将字符写入数组,并在尾端自动加入null,但null字符不包括在返回值中。
其他参数的使用格式如下:
%[flags] [fldwidth] [precision] [lenmodifier] [convtype]
flags | 说明 |
’ | 将整数按千位分组字符 |
- | 在字段左对齐输出 |
+ | 显示带符号转换的正负号 |
fldwidth:说明最小字段宽度,若转换后字符数小于宽度,则多余字符位置用空格填充。
precision:说明整形转换后最小输出位数、浮点数转换后小数点后的最小位数。(. 后跟非负十进制数)
lenmodifier | 说明 |
hh | 按char类型输出 |
h | 按short类型输出 |
l | 按long类型输出 |
ll | 按long long类型输出 |
L | 按long double类型输出 |
convtype | 说明 |
d、i | 有符号十进制 |
u | 无符号十进制 |
o | 无符号八进制 |
x、X | 无符号十六进制 |
e、E | 指数格式双精度浮点数 |
s | 字符串 |
p | 指向void指针 |
函数成功返回存入字符数;函数失败返回负值。
#include <stdio.h>
int scanf( const char *restrict format, ...);
int fscanf( FILE *restrict fp, const char *restrict format, ...);
int sscanf( const char *restrict buf, const char *restrict format, ...);