本博客已迁往http://coredumper.cn
常用的I/O函数可以分为两大类,一类是针对文件的,一类是针对标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)的。
其实stdin、stdout和stderr也可以看作是自动打开的文件,所以针对文件的input函数可以把文件指针设置为stdin,针对文件的output函数可以把文件指针设置为stdout或stderr。
针对文件的I/O函数可以分为两类,一类是针对文本文件的,一类是针对二进制文件的。
以下是针对文本文件的:
1.fgetc() / getc()和fputc() / putc()
fgetc()和getc()基本相同,不同点是getc()可被实现为宏,而fgetc()不能实现为宏。
函数原型:int fgetc(FILE *fp);
函数功能:从fp指向的文件中读取一个字符,并把它作为一个int型变量作为函数的返回值。
当读取到文件结尾或出错时的返回值:EOF(-1)
fputc() 和putc()基本相同,不同点是putc()可被实现为宏,而fputc()不能实现为宏。
函数原型:int fputc (int ch, FILE *fp);
函数功能:将字符ch写到fp所指向的文件的当前写指针的位置。正常情况下,函数返回字符ch的ASCII码值,出错时,返回EOF(-1)。
2.fgets()和fputs()
fgets()
函数原型:char * fgets(char *buf, int bufsize, FILE *fp);
函数功能:从fp指向的文件中读取一个字符串,并写入buf指向的字符数组,返回buf的值。
该函数读取到它所遇到的第一个换行字符,或者读取到比bufsize少一个的字符,或者读取到文件结尾,然后向末尾添加一个空字符。
如果在达到bufsize-1个字符之前遇到了换行字符,它将会保留这个换行字符。
当读取到文件结尾或出错时的返回值:NULL
fputs()
函数原型:int fputs(const char *str, FILE *fp);
函数功能:向fp指定的文件写入str指向的字符串。正常情况下,函数返回一个非负整数;出错时,返回EOF。
3.fscanf()和fprintf()
fscanf()
函数原型:int fscanf(FILE *fp, const char *format, ...);
函数功能:从fp指向的文件中按format指定的格式进行读取,从遇到的第一个非空格和换行字符开始读取,每遇到空格或者换行时结束对一个数据的读取,当读取了format指定的数据个数后,最后读取到的那个数据之后的空格或者换行符仍然位于输入缓冲区内。返回成功读入的数据个数。
注意:在format指定的字符串中,除空白字符外,其他字符必须与输入匹配,若有一个字符不匹配,则停止后续处理,并返回EOF。
当到达文件末尾时,返回EOF。
fprintf()
函数原型:int fprintf(FILE *fp, const char *format, ...);
函数功能:根据format指定的格式,向fp指定的文件写入数据。正常情况下,返回输出的字符数;出错时,返回一个负值。
以下是针对二进制文件的:
fread()和fwrite()
fread()
函数原型:size_t fread ( void *buffer, size_t size, size_t count, FILE *fp) ;
函数功能:从fp指定的文件中读取二进制数据,并写入buffer指向的数组。size表示每个数据块的字节大小,count表示需要读取的数据块个数。函数返回成功读取的数据块个数。
fwrite()
函数原型:size_t fwrite(const void* buffer, size_t size, size_t count, FILE* fp);
函数功能:将buffer指向的二进制数据写入fp指向的文件。size表示每个数据块的字节大小,count表示需要写的数据块个数。函数返回成功写入的数据块个数。
针对标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)的I/O函数:
1.getchar()和putchar()
getchar()
函数原型:int getchar(void);
函数功能:从标准输入中读取下一个字符,并返回该字符。
当读取到文件结尾或出错时的返回值:EOF(-1)
putchar()
函数原型: int putchar(int ch);
函数功能:将字符ch写入标准输出。正常情况下,函数返回字符ch的ASCII码值,出错时,返回EOF(-1)。
2.gets()和puts()
gets()
函数原型:char * gets(char * buffer);
函数功能:从标准输入中读取字符串,写入buffer指向的字符数组,直到遇到第一个换行字符,并舍弃这个换行字符,加上结束字符。返回buffer的值。
当读取到文件结尾或出错时的返回值:NULL
注意:gets()是一个不推荐使用的函数,因为该函数不能指定缓冲区的长度,这样就可能造成缓冲区溢出。
puts()
函数原型:int puts(const char * string);
函数功能:将string指向的字符串写入到标准输出。正常情况下,函数返回一个非负整数;出错时,返回EOF。
需要注意的是,该函数在输出指定的字符串后,还会自动输出一个换行符。
3.scanf()和printf()
scanf()
函数原型:int scanf(const char * format, ... );
函数功能:从标准输入中按format指定的格式进行读取,从遇到的第一个非空格和换行字符开始读取,每遇到空格或者换行时结束对一个数据的读取,当读取了format指定的数据个数后,最后读取到的那个数据之后的空格或者换行符仍然位于输入缓冲区内。返回成功读入的数据个数。
注意:在format指定的字符串中,除空白字符外,其他字符必须与输入匹配,若有一个字符不匹配,则停止后续处理。
printf()
函数原型:int printf(const char *format, ...);
函数功能:根据format指定的格式,向标准输出写入数据。正常情况下,返回输出的字符数;出错时,返回一个负值。
除了以上两大类I/O函数,还有一类I/O函数,它们的存取对象是字符串数组:
sscanf()和sprintf()
sscanf()
函数原型:int sscanf(const char *buffer, const char *format, ...);
函数功能:从buffer指向的字符串中按format指定的格式进行读取,从遇到的第一个非空格和换行字符开始读取,每遇到空格或者换行时结束对一个数据的读取,当读取了format指定的数据个数后,最后读取到的那个数据之后的空格或者换行符仍然位于输入缓冲区内。返回成功读入的数据个数。
注意:在format指定的字符串中,除空白字符外,其他字符必须与buffer指向的字符串中的字符匹配,若有一个字符不匹配,则停止后续处理。
sprintf()
函数原型:int sprintf( char *buffer, const char *format, … );
函数功能:根据format指定的格式,向buffer指定的字符数组写入数据,并在该数组的末尾自动添加一个结束字符。正常情况下,返回写入数组的字符数,不包括结束字符;出错时,返回一个负值。