C基准I/O库
C标准I/O库
参看《Advanced Programming in the UNIX Environment》 Chapter 5
http://learn.akae.cn/media/ch25s02.html
http://www.cplusplus.com/reference/clibrary/cstdio/
#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/