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

自学嵌入式 day 24 -系统编程 文件

一、文件

1.标准io

 stdio.h:标准输入输出库(以计算机为中心)

(1)头文件: stdio.h  ==》标准输入输出头文件
         /usr/include/stdio.h
        <>   是系统库函数,默认路径在/usr/include/
        路径 : ====》stdio.h  ===>stdio.c==>libc.so ==>/usr/lib  so 动态库
        ""   是用户自定义函数,默认是当前路径
        路径: ===>xxx.h  ===>xxx.c

(2)man指令

man  xxx  ===>查看当前xxx命令

①NAME:对函数进行粗略介绍

②SYNOPSIS:有关头文件和函数原型(函数的返回值和参数类型)

③DESCRIPTION:对参数的详细说明

④RETURN VALUE:对返回值的描写

3.对文件进行操作(标准io)

(1)步骤:

①打开文件

②读写文件

③关闭文件

注:FILE :文件流指针

(2)函数:

①fopen:

        FILE *fopen(const char *path, const char *mode);
        功能:打开一个文件并建立一个流指针
        参数:path:要打开文件的路径
        mode:
        r :只读文件不存在报错,文件存在则只读打开

        r+ 读写:文件不存在报错,文件存在则读写打开

        w 只写:文件不存在则创建,文件存在则清0只写打开

        w+ 写读:文件不存在则创建,文件存在则清0写读打开

FILE *fp = fopen("1.txt","w");
    if(NULL == fp)
    {
        fprintf(stderr,"error\n");
        return 1;
    }

②fputc:
        int fputc(int c, FILE *stream);
        功能:向流中写入一个字符
        参数:c:要写入的字符
                stream:文件流指针
        返回值:成功返回写入的字符ASCII码值,失败返回EOF

#include<stdio.h>

int main()
{
    FILE *fp = fopen("1.txt","w");
    if(NULL == fp)
    {
        fprintf(stderr,"error\n");
        return 1;
    }

    fputc('h',fp);
    fputc('e',fp);
    fputc('l',fp);
    fputc('l',fp);
    fputc('o',fp);

    fclose(fp);
    return 0;
}

③fgetc
int fgetc(FILE *stream);
        功能:从流中读取一个字符
        参数:stream:文件流指针
        返回值:成功返回读到字符的ASCII码值,读到文件末尾返回EOF

while(1)
    {
        int c = fgetc(fp_cp);
        if(EOF == c)
        {
            break;
        }
        printf("%c",c);
    }

注:利用fgetc/fputc实现Linux系统的复制命令:

#include <stdio.h>
// ./a.out srcfile1 dstfile2
int main(int argc, char** argv)
{
  if(argc<3)
  {
    fprintf(stderr, "usage:./a.out srcfile dstfile\n");
      return 1;
  }
  FILE* src = fopen(argv[1], "r"); // argv[1]
  FILE* dst = fopen(argv[2], "w"); //  "argv[2]"

  if (NULL == src || NULL == dst)
    {
      fprintf(stderr, "fopen error\n");
      return 1;
    }

  while (1)
    {
      int c = fgetc(src);
      if(EOF == c)
      {
        break;
      }
      fputc(c, dst);
    }

    fclose(dst);
    fclose(src);
  // system("pause");
  return 0;
}

④fgets:

char buf[5]={0};
fgets(buf,5,stdin);
char *fgets(char *s, int size, FILE *stream);
        功能:从stream流对象关联的文件中获取size大小字节的文本数据并存储到s对应的本地内存(栈区数组,堆区内存)
        参数: s 要存储数据的本地内存
                   size 要获取的数据长度,单位字节。
                   stream 要获取的目标文件流对象,可以是stdin ,程序会阻塞等待如果是普通文件fp 则指向文件第一行数据
                返回值:成功 返回指向有效数据的首地址,一般等于s的地址,失败或者文件末尾返回NULL;

#include <stdio.h>

int main(int argc, char *argv[])
{
    FILE* fp = fopen("/etc/passwd","r");
    if(NULL == fp)
    {
        fprintf(stderr,"fopen error\n");
        return 1;
    }

    while(1)
    {
        char buf[1024]={0};
        if(NULL == fgets(buf,sizeof(buf),fp))
        {
            break;
        }
        printf("%s",buf);
    }
    
    fclose(fp);
    return 0;
}

⑤fputs:

int fputs(const char *s, FILE *stream);
        功能:从s所在的本地内存中获取一行数据,并写入stream对应的文件流对象。
        参数:s 要写的信息,一般是固定的字符串或者有数据的数组。
                   stream 要写入的目标文件流对象

        返回值:成功 nonnegative number on success,失败 -1;

#include<stdio.h>

int main(int argc,char *argv[])
{
    if(argc < 2)
    {
        fprintf(stderr,"usage: ./a.out filename");
        return 1;
    }
    FILE* fp = fopen(argv[1],"w");
//    FILE* fp = fopen("4.txt","w");
    if(NULL == fp)
    {
        fprintf(stderr,"fopen error");
        return 1;
    }
    fputs("hello",fp);
    fputs("world",fp);
    return 0;
}

注:利用fgets/fputs实现Linux系统的复制命令:

#include<stdio.h>

int main(int argc,char*argv[])
{
    if(argc < 3)
    {
        fprintf(stderr,"usarge: ./a.out srcname destname");
        return 1;
    }
    FILE* fp = fopen(argv[1],"r");
    FILE* cp = fopen(argv[2],"w");
    if(NULL == fp || NULL == cp)
    {
        fprintf(stderr,"fopen error");
        return 1;
    }
    while(1)
    {
        char buf[1024] = {0};
        if(NULL == fgets(buf,sizeof(buf),fp))
        {
            break;
        }
        fputs(buf,cp);
    }
    fclose(fp);
    fclose(cp);
    return 0;
}

⑥fclose

int fclose(FILE *stream);

        功能:关闭文件

        参数:stream:文件流指针

相关文章:

  • JS逆向 【QQ音乐】sign签名| data参数加密 | AES-GCM加密 | webpack实战 (上)
  • 黑马程序员C++核心编程笔记--2 引用
  • ISOLAR软件生成报错处理(三)
  • 中大型企业 CIO List
  • LangChain + Redis:实现持久化的聊天历史记录管理
  • LVS -DR
  • Vue3对接deepseek实现ai对话
  • 数据结构-排序(1)
  • Spring AI 多模型智能协作工作流实现指南
  • Cookie与Session简介-笔记
  • 漫画Android:Handler机制是怎么实现的?
  • 机器学习:线性回归、损失函数、导数、偏导
  • EC800GCN 华系列 DTU 开发板介绍
  • 挖o心得(4)
  • PINN是否需要对空间进行网格化
  • 前端识别用户在某些页面的停留时间过长,提示可能存在问题
  • Python 包管理工具 uv的一些常用指令
  • 体育智能认知革命:当AI阅读器遇上实时数据API—— 打造体育产业的「数据消化中枢」
  • Dify案例实战之智能体应用构建(二)
  • 音视频解码基础知识
  • 无锡做网站服务/磁力兔子搜索引擎
  • 网站托管服务合同/网络营销课程介绍
  • 做任务推广网站/郑州网站seo公司
  • 网站开发 经常要清理缓存/黄页污水
  • 房地产定制开发/seo简单速排名软件
  • ctb自己做网站/黑帽seo工具