相关资料
https://en.wikipedia.org/wiki/C_file_input/output
https://www.cnblogs.com/wonderKK/archive/2012/06/13/2547740.html
https://blog.csdn.net/shadow7499158/article/details/38931241
《UNIX环境高级编程》第5章
# man stdio
标准IO是基于流的。对一个进程预定义了三个流,它们是:标准输入、标准输出和标准出错。
#include <stdio.h>
FILE *stdin;
FILE *stdout;
FILE *stderr;
标准IO缓冲
标准IO提供缓冲的目的是尽可能减少使用 read 和 write 调用的次数。
全缓冲:在填满标准IO缓冲区后才进行实际的IO操作。
行缓冲:当在输入和输出中遇到换行符时,标准IO执行IO操作。
无缓冲:标准IO库不对字符进行缓冲存储。
ISO C要求缓冲具有下列特征:
1. 当且仅当标准输入和标准输出并不涉及交互式设备时,它们才是全缓冲的。
2. 标准出错决不会是全缓冲的。
但是,这并没有告诉我们,如果标准输入和输出涉及交互式设备时,它们是不带缓冲的还是行缓冲的;以及标准出错是不带缓冲的还是行缓冲的。
通常情况下:
对于驻留在磁盘上的文件通常是由标准IO库实施全缓冲的。
当流涉及一个终端时(例如标准输入和标准输出),通常使用行缓冲。
标准出错是不带缓冲的。
#include <stdio.h>
void setbuf(FILE *stream, char *buf);
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
对于任何给定的流,可以调用上面两个函数更改缓冲类型。
可以使用 setbuf 函数打开或关闭缓冲机制。为了带缓冲进行IO,参数 buf 必须指向一个长度为 BUFSIZ 的缓冲区(该常量定义在<stdio.h>中),通常在此之后该流就是全缓冲的。为了关闭缓冲,将 buf 设置为 NULL。
使用 setvbuf,我们可以精确地指定所需的缓冲类型。这是通过 mode 参数实现的:
_IONBF unbuffered 不带缓冲
_IOLBF line buffered 行缓冲
_IOFBF fully buffered 全缓冲
fclose
#include <stdio.h>
int fclose(FILE *fp);
在该文件被关闭之前,冲洗缓冲区中的输出数据。丢弃缓冲区中的任何输入数据。
当一个进程正常终止时(直接调用 exit 函数,或从 main 函数返回),则所有带未写缓冲数据的标准IO流都会被冲洗,所有打开的标准IO流都会被关闭。
fread
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
fwrite
#include <stdio.h>
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
fflush
#include <stdio.h>
int fflush(FILE *stream);
清空文件流缓冲区。
fileno
#include <stdio.h>
int fileno(FILE *stream);
获取文件描述符。
格式化输出
#include <stdio.h>
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, ...);
The functions in the printf() family produce output according to a format.
The function printf() write output to stdout, the standard output stream;
The function fprintf() write output to the given output stream;
The functions sprintf() and snprintf() write to the character string str.
The function snprintf() write at most size bytes (including the terminating null byte ('\0')) to str.
想想你的文章写的特别好https://www.237fa.com/
《妖狐苏妲己》爱情片高清在线免费观看:https://www.jgz518.com/xingkong/61980.html