C基准I/O库

C标准I/O库
#include <stdio.h>

FILE *fopen(const char *path, const char *mode);	// 成功返回文件指针,出错返回NULL并设置errno
FILE *freopen(const char *path, const char *mode, FILE *stream);

int fclose(FILE *fp);	// 成功返回0,出错返回EOF并设置errno

freopen("A.in", "r", stdin);
freopen("A.out", "w", stdout);
scanf(...);
printf(...);
fclose(stdin);
fclose(stdout);

/***********************************************************/

/* 很多系统函数在错误返回时将错误原因记录在libc定义的全局变量errno中,errno在头文件errno.h中声明,是一个整型变量,所有错误码都是正整数。 */
void perror(const char *s);
char *strerror(int errnum);	// 错误码errnum所对应的字符串

/***********************************************************/

// 由于标准I/O使用了缓冲技术,fflush函数用于确保数据写回了内核,以免进程异常终止时丢失数据。
int fflush(FILE *stream);	// 成功返回0,出错返回EOF并设置errno

/***********************************************************/

// SEEK_SET 从文件开头移动offset个字节
// SEEK_CUR 从当前位置移动offset个字节
// SEEK_END 从文件末尾移动offset个字节
int fseek(FILE *stream, long offset, int whence);	// 成功返回0,出错返回-1并设置errno
long ftell(FILE *stream);	// 成功返回当前读写位置,出错返回-1并设置errno
void rewind(FILE *stream);	// 把读写位置移到文件开头

/***********************************************************/

int fgetc(FILE *stream);	// 成功返回读到的字节,出错或者读到文件末尾时返回EOF
int getchar(void);	// == fgetc(stdin)

int fputc(int c, FILE *stream);	// 成功返回写入的字节,出错返回EOF
int putchar(int c);	// == fputc(c, stdout)

/***********************************************************/

/* 1. 从stream所指的文件中读取以'\n'结尾的一行(包括'\n'在内)存到缓冲区s中,并且在该行末尾添加一个'\0'组成完整的字符串。
2. 如果文件中的一行太长,fgets从文件中读了size-1个字符还没有读到'\n',就把已经读到的size-1个字符和一个'\0'字符存入缓冲区,文件中剩下的半行可以在下次调用fgets时继续读。 */
char *fgets(char *s, int size, FILE *stream);	// 成功时s指向哪返回的指针就指向哪,出错或者读到文件末尾时返回NULL
char *gets(char *s);	// 不要使用,不能指定缓冲区大小,可能会溢出

int fputs(const char *s, FILE *stream);	// 成功返回一个非负整数,出错返回EOF
int puts(const char *s);	// 字符串s写到标准输出(不含结尾的'\0'),但是puts然后又将一个'\n'写到标准输出

/***********************************************************/

// 读写二进制文件,不可移植
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);

fwrite(array, sizeof(struct record), 2, fp);
fread(array, sizeof(struct record), 2, fp);

/***********************************************************/

/* sprintf并不打印到文件,而是打印到用户提供的缓冲区str中并在末尾加'\0',由于格式化后的字符串长度很难预计,所以很可能造成缓冲区溢出,用snprintf更好一些,参数size指定了缓冲区长度,如果格式化后的字符串长度超过缓冲区长度,snprintf就把字符串截断到size-1字节,再加上一个'\0'写入缓冲区,也就是说snprintf保证字符串以'\0'结尾。 */
int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);

/* 返回成功匹配和赋值的参数个数,成功匹配的参数可能少于所提供的赋值参数,返回0表示一个都不匹配,出错或者读到文件或字符串末尾时返回EOF并设置errno */
int scanf(const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
int sscanf(const char *str, const char *format, ...);

参看《Advanced Programming in the UNIX Environment》 Chapter 5
http://learn.akae.cn/media/ch25s02.html
http://www.cplusplus.com/reference/clibrary/cstdio/