linux fputc fgetc fseek rewind 函数

前言

<sprintf fprintf 函数 >

前一节讲了 sprintf fprintf 函数 的缓存问题 在他们的基础上加了一个while1);
来验证 结果都是输出的
不管怎么样 都会写入到内核态 内核态在输出到终端 
并且注意 sprintf只是一个存放缓存的函数 还需要一个printf 来配合使用。
这节来讲 fputc fgetc 函数 的缓存问题 

fputc 函数

在这里插入图片描述

 fputc 简单理解就是往文件里面写入字符  
 #include<stdio.h>


int  main()
{
     FILE *fd;
    
     fd=fopen("w.c","w+");
     
     if(fd==NULL)
     {
         printf("fopen is error\n");
         return -1;
     }
     pritnf("fopen is success\n");
     
     fputc('a',fd);
      
      fclose(fd);
       return 0;

}

在这里插入图片描述

如果证明是否是行缓存直接在后面加 while1);就行了 
#include<stdio.h>


int  main()
{
     FILE *fd;
     
     fd=fopen("w.c","w+");
     
     if(fd==NULL)
     {
         printf("fopen is error\n");
         return -1;
     }
     pritnf("fopen is success\n");  
     fputc('a',fd);
      
      while(1);  
     
      flcose(fd);
      
      return 0;

}

在这里插入图片描述

结果不输出  证明了 他不是行缓存 但是 有 缓存   怎么证明呢 
    在前面基础上加 fputc('\n',fd);  
    1 加入换行符 试试它会不会不受到while1);的影响 
    正常情况 换行是行缓存成立的条件之一  反之就不成立。    
#include<stdio.h>


int  main()
{
     FILE *fd;
     
     fd=fopen("w.c","w+");
     
     if(fd==NULL)
     {
         printf("fopen is error\n");
         return -1;
     }
     pritnf("fopen is success\n");
     
     fputc('a',fd);
     fputc('\n',fd);
      
     while(1);
      
     flcose(fd);
      return 0;

}

在这里插入图片描述

文件里 还是没有内容 所以 fputc 不是行缓存 但有缓存。
说明 fputc 不是行缓存函数 

fgetc 函数

在这里插入图片描述

用 fgetc 把fputc 内容(文件内容 )到输出终端 
#include<stdio.h>


int  main()
{
     FILE *fd;
     int str;
     fd=fopen("w.c","w+");

     if(fd==NULL)
     {
         printf("fopen is error\n");
         return -1;
     }
     printf("fopen is success\n");
      fputc('a',fd);
      str=fgetc(fd);
    printf("str is %c\n",str);

     flcose(fd);

      return 0;

}

在这里插入图片描述

为什么乱码呢  
需要光标移动 因为fputc 到了最后 但是fgetc 却不知道。

fseek函数

在这里插入图片描述

这么配置就行了
SEEK_SET :从0开始 
offest : 0单位 
stream: 文件流
 #include<stdio.h>


int  main()
{
     FILE *fd;
     int str;
     fd=fopen("w.c","w+");

     if(fd==NULL)
     {
         printf("fopen is error\n");
         return -1;
     }
     printf("fopen is success\n");

     fputc('a',fd);
   
     fseek(fd,0,SEEK_SET);
     
      str=fgetc(fd);

    printf("str is %c\n",str);
  
     flcose(fd);

      return 0;

}

在这里插入图片描述

rewind函数

在这里插入图片描述

rewind(fd) = =    fseek(fd,0,SEEK_SET);
写 rewind(fd) 就很方便 
 #include<stdio.h>


int  main()
{
     FILE *fd;
     int str;
     fd=fopen("w.c","w+");

     if(fd==NULL)
     {
         printf("fopen is error\n");
         return -1;
     }
     printf("fopen is success\n");

     fputc('a',fd);
      rewind(fd);
      str=fgetc(fd);

    printf("str is %c\n",str);
  
     flcose(fd);

      return 0;

}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值