wq294948004 发表于 2013-1-26 12:34:18

C标准I/O库

#include <stdio.h>FILE *fopen(const char *path, const char *mode);// 成功返回文件指针,出错返回NULL并设置errnoFILE *freopen(const char *path, const char *mode, FILE *stream);int fclose(FILE *fp);// 成功返回0,出错返回EOF并设置errnofreopen("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并设置errnolong ftell(FILE *stream);// 成功返回当前读写位置,出错返回-1并设置errnovoid rewind(FILE *stream);// 把读写位置移到文件开头/***********************************************************/int fgetc(FILE *stream);// 成功返回读到的字节,出错或者读到文件末尾时返回EOFint getchar(void);// == fgetc(stdin)int fputc(int c, FILE *stream);// 成功返回写入的字节,出错返回EOFint 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指向哪返回的指针就指向哪,出错或者读到文件末尾时返回NULLchar *gets(char *s);// 不要使用,不能指定缓冲区大小,可能会溢出int fputs(const char *s, FILE *stream);// 成功返回一个非负整数,出错返回EOFint 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/
页: [1]
查看完整版本: C标准I/O库