C语言中的标准输入输出流
1, 标准库中的流是自带缓冲的,通常:
1) 若输入输出为终端,一次缓冲一行
2)若输入输出为文件,全缓冲
3)标准错误不缓冲
也就是说,若混用 read select等系统调用 和 流, 很可能数据被缓冲在流的缓冲区,从而让read,读不到数据,或者数据不能及时写入。并且select也将更难检测 fd 的动态
一、单个字符输入函数
int getchar(); //等价于getc(stdin) int fgetc(FILE *f) //一定不被实现为宏,可当做函数指针 int getc(FILE *f); //可被实现为宏
二、单个字符输出函数
int fputc(FILE *f); //一定不会被实现为宏 int putchar(); //等价于putc(stdout) int putc(FILE *f); //可被实现为宏
三、行输入输出行数
int fgets(const char *restrict buf, int n, FILE *restrict fp); int gets(char *buf); //绝对不要使用,会溢出 int fputs(const char *restrict str, FILE *restrict fp); int puts(const char *str); //安全但是不推荐,会自动在末尾加上换行
四、标准输入输出流不能用于读写socket
由于缓冲的原因,使用流对同一个fd交替输入输出时,需要不断刷新缓冲区,输出之后的输入可以用fflush,但是输入之后的输出只能用fseek等函数,然而fseek并不能用于socket,所以socket编程一般不使用流来读写socket
浙公网安备 33010602011771号