C语言标准IO是什么?
C语言标准I/O库提供了一系列函数,用于执行文件输入和输出操作。这些函数遵循ANSI C标准,并在<stdio.h>头文件中声明。以下是C语言标准I/O库中一些主要函数的详细解析:
1. 文件操作函数
1.1 fopen
• 功能:用于打开一个文件,并返回一个指向FILE对象的指针。
• 原型:FILE *fopen(const char *pathname, const char *mode);
• 参数:
• pathname:文件路径和名称。
• mode:打开文件的模式,例如"r"(只读)、"w"(只写)、"a"(追加)、"r+"(读写)等。
• 返回值:成功时返回文件指针,失败时返回NULL。
1.2 fclose
• 功能:关闭一个打开的文件。
• 原型:int fclose(FILE *stream);
• 参数:stream:要关闭的文件指针。
• 返回值:成功时返回0,失败时返回EOF(通常为-1)。
2. 字符读写函数
2.1 fgetc
• 功能:从指定的文件流中读取一个字符。
• 原型:int fgetc(FILE *stream);
• 参数:stream:文件指针。
• 返回值:成功时返回读取的字符(作为无符号字符转换为int),失败或到达文件末尾时返回EOF。
2.2 fputc
• 功能:向指定的文件流中写入一个字符。
• 原型:int fputc(int c, FILE *stream);
• 参数:
• c:要写入的字符。
• stream:文件指针。
• 返回值:成功时返回写入的字符,失败时返回EOF。
2.3 fgets
• 功能:从指定的文件流中读取一行字符串。
• 原型:char *fgets(char *s, int n, FILE *stream);
• 参数:
• s:用于存储读取字符串的缓冲区。
• n:读取的最大字符数(包括终止的空字符)。
• stream:文件指针。
• 返回值:成功时返回指向缓冲区的指针,失败或到达文件末尾时返回NULL。
2.4 fputs
• 功能:向指定的文件流中写入一个字符串。
• 原型:int fputs(const char *s, FILE *stream);
• 参数:
• s:要写入的字符串。
• stream:文件指针。
• 返回值:成功时返回非负值,失败时返回EOF。
3. 格式化输入输出函数
3.1 printf
• 功能:向标准输出(通常是终端)格式化输出字符串。
• 原型:int printf(const char *format, ...);
• 参数:
• format:格式字符串,包含普通字符和格式说明符。
• ...:可变参数列表,与格式说明符对应。
• 返回值:成功时返回输出的字符数,失败时返回负数。
3.2 fprintf
• 功能:向指定的文件流中格式化输出字符串。
• 原型:int fprintf(FILE *stream, const char *format, ...);
• 参数:
• stream:文件指针。
• format:格式字符串。
• ...:可变参数列表。
• 返回值:成功时返回输出的字符数,失败时返回负数。
3.3 scanf
• 功能:从标准输入(通常是键盘)格式化读取数据。
• 原型:int scanf(const char *format, ...);
• 参数:
• format:格式字符串。
• ...:可变参数列表,指向存储输入数据的变量。
• 返回值:成功时返回成功读取的项数,失败时返回EOF。
3.4 fscanf
• 功能:从指定的文件流中格式化读取数据。
• 原型:int fscanf(FILE *stream, const char *format, ...);
• 参数:
• stream:文件指针。
• format:格式字符串。
• ...:可变参数列表。
• 返回值:成功时返回成功读取的项数,失败时返回EOF。
4. 数据块读写函数
4.1 fread
• 功能:从指定的文件流中读取数据块。
• 原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
• 参数:
• ptr:指向存储读取数据的缓冲区的指针。
• size:每个数据项的大小(以字节为单位)。
• nmemb:要读取的数据项数。
• stream:文件指针。
• 返回值:成功时返回实际读取的数据项数,失败时返回0。
4.2 fwrite
• 功能:向指定的文件流中写入数据块。
• 原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
• 参数:
• ptr:指向要写入数据的缓冲区的指针。
• size:每个数据项的大小(以字节为单位)。
• nmemb:要写入的数据项数。
• stream:文件指针。
• 返回值:成功时返回实际写入的数据项数,失败时返回0。
5. 文件定位函数
5.1 fseek
• 功能:移动文件流中的读写位置。
• 原型:int fseek(FILE *stream, long offset, int whence);
• 参数:
• stream:文件指针。
• offset:偏移量,以字节为单位。
• whence:起始位置,可以是SEEK_SET(文件开头)、SEEK_CUR(当前位置)、SEEK_END(文件末尾)。
• 返回值:成功时返回0,失败时返回非零值。
5.2 ftell
• 功能:获取文件流中的当前读写位置。
• 原型:long ftell(FILE *stream);
• 参数:stream:文件指针。
• 返回值:成功时返回当前位置(以字节为单位),失败时返回-1L。
5.3 rewind
• 功能:将文件流中的读写位置重置为文件开头。
• 原型:void rewind(FILE *stream);
• 参数:stream:文件指针。
• 返回值:无。
6. 其他函数
6.1 fflush
• 功能:刷新文件流中的缓冲区。
• 原型:int fflush(FILE *stream);
• 参数:stream:文件指针,如果为NULL,则刷新所有打开的文件流。
• 返回值:成功时返回0,失败时返回EOF。
6.2 ferror
• 功能:检测文件流中是否发生错误。
• 原型:int ferror(FILE *stream);
• 参数:stream:文件指针。
• 返回值:如果发生错误,返回非零值;否则返回0。
6.3 feof
• 功能:检测文件流中是否到达文件末尾。
• 原型:int feof(FILE *stream);
• 参数:stream:文件指针。
• 返回值:如果到达文件末尾,返回非零值;否则返回0。
注:
• 缓冲机制:标准I/O库使用缓冲机制来提高性能。缓冲类型包括全缓冲(缓冲区满时刷新)、行缓冲(遇到换行符时刷新)和无缓冲(不缓存直接操作文件)。
• 错误处理:进行文件操作时,应检查函数的返回值,并使用errno变量获取详细的错误信息。
• 资源管理:使用完文件后,应及时关闭文件,释放系统资源。
通过组合使用这些函数,可以实现各种复杂的文件操作任务。