当前位置: 首页 > article >正文

嵌入式学习Day18 linux高级编程 --- 流的定位

    1.ftell

      long ftell(FILE *stream);
      功能:
        获得流的偏移量
      返回值:
        long 类型
        
      fp = fopen("file.txt","r");
      ftell(fp);
        

    2.rewind

      void rewind(FILE *stream);
      功能:
        将流的偏移量重新设置到开头、

fp = fopen("file.txt","r");
rewind(fp);

      
    3.fseek 

      int fseek(FILE *stream, long offset, int whence);
      功能:
        设置流的偏移量
      参数:
        stream:文件流指针
        offset:偏移量
            > 0 向后偏移
            < 0 向前偏移
      whence:
            SEEK_SET    文件开头
            SEEK_CUR    文件当前位置
            SEEK_END    文件末尾    

练习:实操fseek的具体功能

#include<stdio.h>

int main()
{
    FILE* fp = NULL;

    fp = fopen("file.txt","w");
    if(fp == NULL)
    {
        perror("fail to open file.txt");
        return -1;
    }

    fseek(fp,10,SEEK_SET);
    fputc('a',fp);  //从开始位置向后偏移10个偏移量,写a

    fseek(fp,-5,SEEK_CUR);
    fputc('b',fp);  //从当前位置向前偏移5个偏移量,写b
    
    fseek(fp,0,SEEK_SET);
    fputc('c',fp);  //在开始位置处写c

    fclose(fp);

    return 0;
}

    练习:编写一个程序实现统计一个文件的大小

#include<stdio.h>

int main()
{    
    FILE* fp1 = NULL;
    FILE* fp2 = NULL;
    long len = 0;

    fp1 = fopen("file.txt","r");
    if(fp1 == NULL)
    {
        perror("fail to open file.c");
        return -1;
    }
    
    fp2 = fopen("file1.txt","w");
    if(fp2 == NULL)
    {
        perror("fail to open file1.c");
        return -1;
    }

    fseek(fp1,0,SEEK_END); //是光标偏移在文件末尾
    len = ftell(fp1);      //获得流的偏移量

    fprintf(fp2,"len = %ld\n",len);

    fclose(fp1);
    fclose(fp2);

    return 0;
}

    练习:从终端输入一个单词,获得单词的含义

#include<stdio.h>
#include<string.h>

int main()
{
    FILE* fp = NULL;    //文件流指针
    char tmpbuff[4096] = "abacus           n.frame with beads that slide along parallel rods, used for teaching numbers to children, and (in some countries) for counting"; //将dict.txt文件中第一个单词的那一行内容放入数组中
    char arr[20] = {0}; //存放要找的单词
    char* ptmp = NULL;  //分割单词和单词注释的指针
    char* p = NULL;     //存放fgets的返回值
    
    scanf("%s",arr);    //输入要查找的单词

    fp = fopen("dict.txt","r");
    if(fp == NULL);
    {
        perror("fail to open dict.txt");
        return -1;
    }

    while(1)
    {
        p = fgets(tmpbuff,sizeof(tmpbuff),fp); //按流读取,第一次读完后接下来鼠标指向第一次读完的位置,第二次读取从鼠标位置开始,不是从头开始
        if(p == NULL)
        {
            break;
        }

        ptmp = tmpbuff;
        while(*ptmp != ' ' && *ptmp != '\0')
        {
            ptmp++;
        }
        *ptmp = '\0'; //分割出单词
        ptmp++;

        while(*ptmp == ' ')  //找单词注释的开头位置,分割出单词注释
        {
            ptmp++;
        }

        if(strcmp(arr,tmpbuff) == 0)
        {
            printf("%s\n",tmpbuff);
            printf("%s\n",ptmp);
            break;
        }

    }

    printf( "input error\n");

        fclose(fp);


    return 0;
}


http://www.kler.cn/news/232589.html

相关文章:

  • 形态学算法应用之连通分量提取的python实现——图像处理
  • Spinnaker多云持续交付平台: 部署Minio存储服务
  • 猜猜谁是凶手?
  • 通过Spring @Validated 更优雅的实现参数校验
  • c++之说_13|模板 折叠表达式
  • 贪心算法的应用
  • 【LangChain-04】利用权重和偏差跟踪和检查LangChain代理的提示
  • Pymysql之Connection中常用API
  • 20240206作业
  • 【人工智能】Fine-tuning 微调:解析深度学习中的利器(7)
  • 【Java】eclipse连接MySQL数据库使用笔记(自用)
  • Java面试题2024(Java面试八股文)
  • C语言---计算n的阶乘
  • 云计算运营模式介绍
  • <网络安全>《18 数据安全交换系统》
  • K8S系列文章之 [使用 Alpine 搭建 k3s]
  • 【Flink状态管理(二)各状态初始化入口】状态初始化流程详解与源码剖析
  • 开源大数据集群部署(十)Ranger usersync部署
  • 【RT-DETR有效改进】利用SENetV2重构化网络结构 (ILSVRC冠军得主,全网独家首发)
  • Springboot 整合 Elasticsearch(二):使用HTTP请求来操作ES
  • 开源大型语言模型概览:多语种支持与中文专注
  • ruoyi若依框架SpringSecurity实现分析
  • leetcode (算法)66.加一(python版)
  • 美国服务器如何
  • 眸思MouSi:“听见世界” — 用多模态大模型点亮盲人生活
  • Bee+SpringBoot稳定的Sharding、Mongodb ORM功能(同步 Maven)
  • C#系列-访问SqlServer+Mysql+Oracle数据库(6)
  • 4.0 Zookeeper Java 客户端搭建
  • B2080 计算多项式的值(洛谷)
  • 【Linux】Linux开发工具(yum、gdb、git)详解