C的I/O函数备忘录

单字符的I/O

int getc(FILE* ): 1.可能实现为宏;2.出错或达到文件尾返回EOF;
int fgetc(FILE* ): 1.一定是函数;2.出错或达到文件尾返回EOF;
int getchar(voiid): 1.从标准输入读取,等价于fgetc(stdin);2.出错或达到文件尾返回EOF;
int ungetc(int c, FILE* fp): 1.回送的字符不必等于上次读到的字符;2.不能回送EOF;3.到达文件尾后仍然能回送字符,且会清楚该流的文件结束标记;4.支持任意次数的回送;回送的字符会重新回到流缓冲区中;
int putc(int c, FILE* fp): 1.可能实现为宏;2.成功则返回c,出错则返回EOF;
int fputc(int c, FILE* fp): 1.一定是函数;2.成功则返回c,出错则返回EOF;
int putchar(int c): 1.输出到标准输出,等价于fputc(c, stdout);2.成功则返回c,出错则返回EOF;

单行的I/O

char* fgets(char* buf, int n, FILE* fp): 1.成功返回buf,已到达文件尾或出错返回null;2.读取了n-1个字符(包括换行符)或在读取n-1个字符前读取到换行符或到达文件尾则停止读取;3.缓冲区自动在读取字符后面添加null字节;

char* gets(char* buf): 1.从标准输入读取;2.成功返回buf,已到达文件尾或出错返回null;3.不能指定缓冲区大小,不推荐使用;4.不将读取到换行符存入缓冲区;

int fputs(const char* str, FILE* fp): 1.成功返回非负值,失败返回EOF;2.尾端的null字节不会被写到流中;

int puts(const char* str): 1.输出到标准输出;2.尾端的null字节不会被写到流中;3.会自动在末尾添加换行符;

二进制I/O

size_t fread(void* ptr, size_t size, size_t nobj, FILE* fp): 1.返回写入的对象数;2.如果返回值小于所要求的nobj则出错;3.只能用于读取同一系统(最好同一编译器编译)上程序已写的数据,否则可能因为对齐,大小端等问题出错;

size_t fwrite(const void* ptr, size_t size, size_t nobj, FILE* fp): 1.如果出错或达到文件尾,返回值可以小于nobj;

格式化I/O

int fprintf(FILE* fp, const char* format, ...): 1.将格式化字符写入流;2.成功返回输出字符数,出错返回负值;
int printf(const char* format, ...): 1.输出到标准输出;2.成功返回输出字符数,出错返回负值;
int dprintf(int fd, const char* format, ...): 1.输出到指定的文件描述符;2.成功返回输出字符数,出错返回负值;
int sprintf(char* buf, const char* format, ...): 1.将格式化字符写入数组buf中;2.自动在尾部添加null字节,但不包括在返回值中;
int snprintf(char* buf, size_t n, const char* format, ...): 1.将格式化字符写入数组buf中;2.自动在尾部添加null字节,但不包括在返回值中;最多保存n-1个字符,超出的字符会被丢弃,但是会包括在返回值中;
int vfprintf(FILE* fp, const char* format, va_list arg): 
int vprintf(const char* format, va_list arg): 
int vdprintf(int fd, const char* format, va_list arg): 
int vsprintf(char* buf, const char* format, va_list arg): 
int vsnprintf(char* buf, size_t n, const char* format, va_list arg): 1.跟前面不加v的函数基本一样,用arg取代不定常参数;
int fscanf(FILE* fp, const char* format, ...): 1.成功返回输入项数,出错或到达文件尾,返回EOF;
int scanf(const char* format, ...): 1.从标准输入读取;2.成功返回输入项数,出错或到达文件尾,返回EOF;
int sscanf(const char* buf, const char* format, ...): 1.从字符串读取;2.成功返回输入项数,出错或到达文件尾,返回EOF;
int vfscanf(FILE* fp, const char* format, va_list arg):
int vscanf(const char* format, va_list arg): 
int vsscanf(const char* buf, const char* format, va_list arg): 1.跟前面不加v的函数基本一样,用arg取代不定常参数;

定位流

long ftell(FILE* fp): 1.返回但其文件位置,出错返回-1;

int fseek(FILE* fp, long offset, int whence): 1.对于文本文件,whence只能是SEEK_SET(文件起始位置),offset只能是0或ftell的返回值;2.成功返回0,出错返回-1;

void rewind(FILE* fp): 1.将流设置到文件的起始位置;

int fgetpos(FILE* fp, fpos_t* pos): 1.将当前文件位置保存在pos;2.成功返回0,否则返回非0;

int fsetpos(FILE* fp, const fpos_t* pos): 2.将当前文件位置设置为pos;2.成功返回0,否则返回非0;

缓冲

void setbuf(FILE* fp, char* buf): 1.如果buf为NULL,流设置为不缓冲,否则buf必须指向长度至少为BUFSIZ的缓存区,流设置为全缓冲;2.必须在流打开后和执行任何一个其他操作之前调用;

int setvbuf(FILE* fp, cahr* buf, int mode, size_t size): 1.设置流的缓冲模式和缓冲大小等;2.必须在流打开后和执行任何一个其他操作之前调用;3.成功返回0,否则返回非0;

int fflush(FILE* fp): 1.使流所有未写的数据都被传送至内核;2.如果fp是NULL,则所有输出流都被冲洗;3.成功返回0,出错返回EOF;

打开与关闭

FILE* fopen(const char* pathname, const char* type):

FILE* freopen(const char* pathname, const char* type, FILE* fp): 1.在指定的流上打开指定的文件,如果该流已经打开,则先关闭,如果流已经定向,则清除定向;2.一般用于将一个文件打开为一个预定义的流:标准输入,标准输出或标准错误;

FILE* fdopen(int fd, const char* type): 1.将文件描述符转化流;

type可以为以下值:

"r"或“rb”: 为读而打开

"w"或"wb": 为写而打开

"a"或"ab": 追加;为在文件尾写而打开,或为写而创建

"r+"或"r+b"或"rb+": 为读和写而打开,不截断文件

"w+"或"w+b"或"wb+": 为读和写而打开,把文件截断至0长

"a+"或"a+b"或"ab+": 为在文件尾读和写而打开或创建

当以读写打开文件时(type中有+),具有以下的限制:

1.如果中间没有fflush,fseek,fsetpos,rewind,则在输出的后面不能直接跟随输入

2.如果中间没有fseek,fsetpos,rewind,或者一个输入操作没有到达文件尾,则在输入操作之后不能直接跟随输出
int fclose(FILE* fp): 1.冲洗缓冲中的输出数据,丢弃缓冲区中的输入数据;2.即使调用失败,流也不再跟文件和缓冲区关联;3.成功返回0,出错返回EOF;

错误处理

int feof(FILE*): 1.判断是否达到文件尾(并且尝试进行读操作等),条件为真返回非0,否则返回0;

int ferror(FILE*): 1.判断流是否出错,条件为真返回非0,否则返回0;

void clearerr(FILE*): 1.清除流的eof和error标志;

void perror(const  char* str): 1.根据全局变量errno打印错误信息,如果str非null,在错误信息前加str的内容;

临时文件

char* tmpnam(char* ptr): 1.产生一个跟现有文件名不同的一个有效路径名字符串;2.最多调用次数是TMP_MAX;3.如果ptr是NULL,路径名保存在静态区中(会被下次调用覆盖),如果不是NULL,ptr指向至少是L_tmpnam个字符的数组;3.失败返回NULL;

FILE* tmpfile(void): 1.创建一个临时的二进制文件(类型wb+);2.关闭该文件或程序结束自动删除文件,程序异常终止时是否删除文件取决于实现;3.失败返回NULL;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章