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

posted on 2016-03-17 19:57  远近闻名的学渣  阅读(520)  评论(0)    收藏  举报

导航