标准C的I/O

char *fgets(char *s, FILE *stream);
int printf(const char *format,.....);
int fprintf(FILE *stream, const char *format,.....);
size_t fread(void *ptr, size_t size, size_t nmemb,FILE *stream );
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream );

1.FILE结构体

typedef  struct iobuf{
    int cnt;               /*剩余的字节数*/
    char *ptr;             /* 下一个字符的位置*/
    char *base;            /*缓冲区的位置*/
    int flag;              /*文件访问模式*/
    int fd;                /*文件描述符*/
}FILE;

标准C的I/O的所有函数,都带缓存功能。标准输入(键盘操作)、标准输出(屏幕操作)、文件IO的输入输出操作。比如:从标准输入读取一行数据,或者通过printf函数从内存中数据写到标准终端上,实际上,在内部不会把这些数据直接读到内存这些缓存当中(字符数组等输出到屏幕),而是中间会经过一个缓存,通过缓存先存放下来,再通过缓存将数据写入文件,或者输出到屏幕等。
在这里插入图片描述

      stdin 针对标准输入(键盘)
      stdout 针对标准输出(屏幕)
      stderr 针对标准错误(屏幕)

这三个类型都是FILE类型的结构体指针(流指针)。

2.标准C的IO缓存类型
(1)全缓存
要求填满整个缓存区后才进行I/O系统调用操作。对于磁盘文件通常使用全缓存访问。
(2)行缓存
涉及一个终端时(例如标准输入和标准输出),使用行缓存。
行缓存满自动输出。
碰到换行符自动输出。
(3)无缓存
标准错误流stderr通常是不带缓存区的,这使得错误信息能够尽快地显示出来。

例子:

#include<stdio.h>
int main(void)
{
     printf("hello!");
     while(1)
     {
         sleep(1);
     }
     rerturn 0;
}

printf(“hello!”) 没有在终端输出。标准输入输出是行缓存,行缓存没有存满,所以没有输出。加上换行符会有输出。 printf(“hello!\n”);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值