Linux Ubuntu下的标准IO相关库函数的介绍与使用

2023-05-16

       大家好,我是练习编程时长两年半的个人练习生昆工第一ikun,今天我们来分享一下标准IO相关函数库的介绍与使用,话不多话,开团!!!!!


目录

一、标准IO相关库函数

1.打开文件 -- fopen()

​         2.关闭文件 -- fclose()

3.按字节读写 -- fgetc()/fputc()

4.按行读写 -- fgets()/fputs()

实例:

5.按对象读写

6.刷新流 -- fflush()

7.文件定位

8.判断错误流 -- feof()

二、实例


一、标准IO相关库函数

fopen() / fclose() -- 打开/关闭文件

fgetc() / fputc() -- 按字节读写文件

fgets() / fputs() -- 按行读写文件

fread() / fwrite() -- 按对象读写文件

ftell() / fseek() / rewind() -- 定位文件

fflush() -- 刷新流

feof() -- 判断错误流

1.打开文件 -- fopen()

       #include <stdio.h>

      FILE *fopen(const char *pathname, const char *mode);

        参数:
           pathname:打开文件的文件名(包含路径)
            mode:打开文件的方式
               r:以只读的方式打开文件,文件必须要存在
               r+:以读写方式打开文件,文件必须要存在
               w: 以只写方式打开文件,如果文件不存在,则会先创建再打开
               w+:  以读写方式打开文件,如果文件不存在,则会先创建再打开
               a: 以只写方式打开文件,如果文件不存在,则会先创建再打开
               a+: 以读写方式打开文件,如果文件不存在,则会先创建再打开
        返回值:
           成功返回对应的文件的流指针,失败返回NULL,并且设置错误号(errno)
             
           errno:当前系统中最后一个错误的编号
    ----------------------------------------------------------------------------    
           #include <string.h>
            char *strerror(int errnum);
            参数:
               errnum:错误号
            返回值:
               成功返回错误原因
    -----------------------------------------------------------------------------          
      #include <stdio.h>

      void perror(const char *s);
        参数:
           s:提示信息

2.关闭文件 -- fclose()

       #include <stdio.h>

      int fclose(FILE *stream);
        参数:
           stream:关闭文件对应的流指针
       返回值:
           成功返回0,失败返回-1;

3.按字节读写 -- fgetc()/fputc()


      #include <stdio.h>

      int fgetc(FILE *stream);
        参数:
            stream:流指针
       返回值:
            成功返回读取的字符,失败返回-1;
            读到文件末尾也会返回-1;
-----------------------------------------------------------------------------
     
      #include <stdio.h>

      int fputc(int c, FILE *stream);
        参数:
           c:输入的字符
           stream:流指针
        返回值:
           成功返回写入的字符,失败返回-1;
             

4.按行读写 -- fgets()/fputs()

       #include <stdio.h>

      char *fgets(char *s, int size, FILE *stream);
        参数:
           s:字符串首地址
           size:请求读取数据的最大长度
           stream:流指针

        返回值:
           成功返回得到字符串的首地址,失败返回NULL;

        注意:
           ①当读取的内容遇到换行符,读取内容结束  
           ②最大读取内容为 size-1 个

  ---------------------------------------------------------------------------
           
       int fputs(const char *s, FILE *stream);    
           参数:
               s:写入字符串的首地址
               stream:流指针
           返回值:
               失败返回-1;
 

实例:

编写一个程序,实现两个文件之间内容的复制

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

int main(int argc, char *argv[])
{   
    if(argc < 3){
        printf("usage:%s <src_filename> <dst_filename>\n", argv[0]);
        return -1; 
    }
    FILE *fp1 = fopen(argv[1], "r");
    if(NULL == fp1)
    {
        perror("open argv[1]");
        return -1;
    }
    FILE *fp2 = fopen(argv[2], "w+");
    if(NULL == fp2)
    {
        perror("open argv[2]");
        return -1;
    }
 
    char buf[64];
    while(fgets(buf, 64, fp1) != NULL)
    {
     fputs(buf, fp2);
     memset(buf, 0, 64);
    }
	printf("复制成功!\n");
    return 0;
} 

 

       我们当前目录下有一个文件 cxk.txt,里面的内容是54行歌词,我们要将它复制到另一个文件rap.txt中,运行程序 


      我们可以看到,运行程序后,当前目录下创建了一个文件rap.txt,并且将cxk.txt的内容复制到了rap.txt中,程序功能实现完毕。

 

 

5.按对象读写

       #include <stdio.h>

      size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

        返回值:
           ptr:存放字符串的首地址
           size:对象大小
           nmemb:对象个数
           stream:流指针
      返回值:  
           成功返回读到的对象个数,失败返回0;


      size_t fwrite(const void *ptr, size_t size, size_t nmemb,
                    FILE *stream);
          参数:
           ptr:存放字符串的首地址
           size:对象大小
           nmemb:对象个数
           stream:流指针 
      返回值:  
           成功返回读到的对象个数,失败返回0;

6.刷新流 -- fflush()

       #include <stdio.h>

      int fflush(FILE *stream);

        参数:
           stream:流指针
       返回值:
           成功返回0,失败返回-1;

7.文件定位

       #include <stdio.h>

      long ftell(FILE *stream);
        功能:
           返回文件指针相对于文件开头的偏移量
       参数:
           stream:流指针
       返回值:
          成功返回文件指针相对于文件开头的偏移量,失败返回-1;
           
     
      文件指针最后定位位置 == offset + whence
     
      int fseek(FILE *stream, long offset, int whence);
        参数:
           stream:流指针
           offset:偏移量,可正可负
           whence:基准点
               SEEK_SET:将文件指针定位在文件开头
               SEEK_CUR:将文件指针定位在当前位置
               SEEK_END:将文件指针定位在文件末尾
        返回值:
           成功返回0,失败返回-1;

      void rewind(FILE *stream);
        功能:
           将文件指针定位在文件开头

8.判断错误流 -- feof()

       #include <stdio.h>

      int feof(FILE *stream);

        返回值:
           1 -- 流访问结束
           0 -- 错误返回


二、实例

打开一个文件,向文件中每隔1s记录当前行数和时间,并且下一次运行程序时,行数要接着上一次

代码如下:


#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char *argv[])
{
    FILE *fp = fopen("1.txt", "a+");
    if(NULL == fp)
    {
        perror("open");
        return -1;
    }
    int i = 0, n = 1;
    char buf[64];
    while(fgets(buf, 64, fp) != NULL)  //计算行数
   {    
        if(buf[strlen(buf)-1] == '\n')
        {
            n++;
        }
        memset(buf, 0, 64);
   }

    time_t my_t;

    while(i < 60){           //设置自由秒数输入
        sleep(1);
        time(&my_t);
        struct tm *t = localtime(&my_t);
        printf("第%d秒\n", t->tm_sec);       //在终端打印输入的次数
        fprintf(fp, "第%d行:%d年%d月%d日%d:%d:%d\n", n, t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);    //将当前时间以年月日时分秒的格式存储到文件之中
        if(i == 59)
        {
            i = 0;
        }
        i++;
        n++;           //记录行数
        fflush(fp);    //刷新流,以便手动停止
    }

    return 0;
} 

       可以看到,在运行程序之前我们当前的目录下没有1.txt这个文件,在运行程序后,创建了一个1.txt文件并且将当前的时间按秒记录到1.txt中。如下图所示:


      然后,我们再次运行程序,可以发现行号接着上次的19开始输入

       到这里,功能实现完毕,这个实例里用到了时间函数time,localtime,还用到了fprintf函数,大家有不知道这三个函数用法的可以用man手册获取用法及函数原型。


       今天分享的内容就到这里了,如果大家喜欢可以三连一波,我是练习编程时长两年半的个人练习生昆工第一ikun,我们明天见。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux Ubuntu下的标准IO相关库函数的介绍与使用 的相关文章

  • 路劲规划与轨迹跟踪学习4——人工势场法

    本文参考 85条消息 路径规划 局部路径规划算法 人工势场法 xff08 含python实现 c 43 43 实现 xff09 CHH3213的博客 CSDN博客 人工势场法路径规划 路径规划与轨迹跟踪系列算法学习 第6讲 人工势场法 哔哩
  • STM32 HAL库详解(二):UART

    在stm32编程时 xff0c 最常用的通讯方式就是串口通讯 一般使用HAL库来实现串口通讯 但有时 xff0c 我们不满足于HAL库的代码 xff0c 或者出现 玄学bug 需要了解具体原理来debug 下面将通过详解HAL库函数来解释u
  • C语言实现十进制转化为十六进制-------数组,switch语句,while循环语句

    内容目录 十进制如何转化为十六进制 思路解析 运用知识点 代码实现 1 十进制如何转化为十六进制 十六进制每位数上从大到小是0123456789ABCDEF 十进制转化为十六进制与十进制转化为八进制一样求法 xff0c 就是求余 例如十进制
  • 实测(一) NVIDIA Xavier NX + D435i / 奥比中光Astrapro 相机+ ORB-SLAM 2 + 3 稠密回环建图

    开发环境 xff1a NX 43 Ubuntu18 04 43 ROS melodic 一 ARM架构下 Realsense D435i 环境搭建 因为NVIDIA Xavier NX是一款arm架构的嵌入式开发板 xff0c 因此安装方式
  • c/c++输入带空格、tap、换行符的字符串

    1 scanf charstr 10 scanf 34 s 34 str 123 adw 其实只输入了 123 1 不读入空格和回车还有tap键 从空格处结束 2 输入字符串长度超过字符数组元素个数不报错 xff0c 只是不读入 3 当输入
  • 如何防止网站被爬虫爬取的几种办法

    相较于爬虫技术 xff0c 反爬虫实际上更复杂 目前许多互联网企业都会花大力气进行 反爬虫 xff0c 网络爬虫不但会占据过多的网站流量 xff0c 导致有真正需求的用户没法进入网站 xff0c 另外也有可能会导致网站关键数据的外泄等现象
  • 指定位置插入字符串(c++insert函数、find函数使用)

    一 insert函数 xff08 插入函数 xff09 str1 61 str1 xff08 被插入字符串 xff09 insert 插入位置 str2 xff08 被插入字符串 xff09 xff0c n xff0c m ps xff1a
  • vector容器(C++黑马程序员笔记)

    3 2 vector容器 3 2 1 vector基本概念 功能 vector数据结构和数组非常相似 xff0c 也称为单端数组 vector与普通数组区别 不同之处在于数组是静态空间 xff0c 而vector可以动态扩展 动态扩展 并不
  • set容器(c++黑马程序员笔记)

    3 8 set multiset容器 3 8 1 set基本概念 简介 所有元素都会在插入时自动被排序 本质 set multiset属于关联式容器 xff0c 底层结构是用二叉树实现 set和multiset区别 set不允许容器中有重复
  • map函数

    3 9 map multimap容器 3 9 1 map基本概念 简介 map中所有元素都是pair pair中第一 个元素为key 键值 xff0c 起到索引作用 xff0c 第二个元素为value 实值 所有元素都会根据元素的键值自动排
  • 解决Maven配置本地仓库路径不生效问题多个方法详解。(已成功解决自己遇到的问题)

    首先我尝试了很多种方法 xff0c 就是这个方法让我成功 xff0c 和大家分享一下 xff01 xff08 我用方法二成功的 xff01 xff09 maven本地仓库默认值 xff1a 用户家目录 m2 repository 由于本地仓
  • Servlet快速学习和Tomcat快速部署(web)

    Servlet快速学习和Tomcat快速部署 xff08 web xff09 一 快速入门二 执行流程三 生命周期四 Servlet体系结构五 Servlet urlPattern配置六 XML配置方式编写Servlet七 Tomcat快速
  • 蓝桥杯必备模板(python)

    蓝桥杯必备算法模板 xff08 python xff09 xff1a 前缀和模板差分模板二分双指针位运算最大公约数和最小公倍数模板判断质数和埃氏筛法模板唯一分解定理和质因数分解关系和模板快速幂并查集区间合并回溯算法模板 xff1a DFS
  • 蓝桥杯必备模块及常用操作(python)

    蓝桥杯必会模块 xff08 python xff09 xff1a 字符类型模块日期函数模块 常用 优先级队列itertools模块collections模块Bisect模块List 集合set 集合Math模块 字符类型模块 先看点常用但比
  • string的几个常见库函数

    文章目录 前言一 strlen直接求字符串长度二 strcpy用来赋值三 strcat追加字符串四 strcmp用于比较两个字符串五 strstr子串查找六 strtok应用七 加长度限制八 strerror 九 其他操作1 iscntrl
  • vector详解

    在开始学习C 43 43 的STL之后 xff0c 相信大家都学会通过查文档来了解一些库函数 xff0c 今天我来给大家介绍vector xff0c 从基本的使用到vector背后的源码实现 xff0c 迭代器等展开讲 xff0c 仔细阅读
  • 如何利用开源思想开发一个SEO友好型网站

    当你对一个网站进行 SEO 优化的时候 xff0c 不要期望你的努力能立即得到回报 耐心等待并更正内容营销策略 xff0c 最终会发现你的网站很受用户欢迎 下面就教你如何利用开源思维开发一个SEO友好型网站 xff01 首先 xff0c 你
  • 【STM32】串口通讯USART串口中断配置

    目录 STM32 USART 简介 程序编写 硬件接线 实际波形 STM32 USART 简介 STM32的USART通用同步异步收发器是一个串行通信设备 xff0c 可以灵活的与外部设备进行全双工数据交换 有别于USART xff0c 还
  • openmv第三天之标记跟踪

    AprilTag是一个视觉基准系统 感觉就是一个可以定位 校准帮助openmv来找到 定位的东西 官方解释的用处 xff1a 简单来说 xff0c 只要把这个tag贴到目标上 xff0c 就可以在OpenMV上识别出这个标签的3D位置 xf
  • 【A_star三维路径规划】A_star算法无人机三维路径规划【含Matlab源码 1387期】

    一 A star算法简介 0 引言 随着现代技术的发展 飞行器种类不断变多 应用也日趋专一化 完善化 如专门用作植保的大疆PS X625无人机 用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机 以及用作水下救援的白鲨MIX水下无人机等

随机推荐

  • 【路径规划】A_star算法机器人动态避障路径规划【含Matlab源码 1033期】

    一 A star算法简介 1 A Star算法及其应用现状 进行搜索任务时提取的有助于简化搜索过程的信息被称为启发信息 启发信息经过文字提炼和公式化后转变为启发函数 启发函数可以表示自起始顶点至目标顶点间的估算距离 也可以表示自起始顶点至目
  • C语言打印输出字符串的几种方法

    思路分析 知识点补充 1 xff0c 在C语言中 xff0c 一维数组的数组名实际上就是指向数组首项元素的指针 2 xff0c 如果指针p已经指向一个字符串 xff0c 判断字符串是否结束 xff0c 一般采用while p 61 39 0
  • 对‘fmt::v9::detail::throw_format_error(char const*)’未定义的引用

    在学习视觉SLAM十四讲第十二章的过程中 xff0c 尝试跑了一下单目稠密地图构建的代码 xff0c 在编译源代码的过程中遇到该问题 xff0c 编译结果中显示长篇的 CMakeFiles dense mapping dir dense m
  • [STM32F103C8T6] 串口

    1 非中断串口发送数据 串口发送 接收函数 xff1a HAL UART Transmit 串口发送数据 xff0c 使用超时管理机制 HAL UART Receive 串口接收数据 xff0c 使用超时管理机制 HAL UART Tran
  • 【C语言】strcat函数_字符串追加/连接

    前言 xff1a 在C C 43 43 的学习过程当中一定一定要多刷题 xff0c 牛客网作为国内内容超级丰富的IT题库 xff0c 尤其是它的C C 43 43 xff0c 有从入门到大厂真题 xff0c 而且大部分的考试题目也是从中抽取
  • SWUST OJ448: 字符串查找

    题目描述 在一段句子中找出给定字符串出现在句子中第一个字母出现的位置 句子中字符个数小于4500 字符串字符个数小于120 输入 两行 第一行是给定字符串 第二行是句子 输出 整数 xff0c 字符串出现的位置 样例输入 abcde thi
  • C语言十进制转十六进制

    输入 xff1a 123 输出 xff1a 7B include lt stdio h gt int main int n scanf 34 d 34 amp n int a 100 int count int i 61 0 while 1
  • CentOS软件那么老为什么大家还要用它?

    作为一个专业的服务器系统 xff0c RHEL 系统理论上每一个软件包都有 RedHat 内部的人员负责维护 xff0c 这个维护包括长期 xff08 和系统生命周期一样长 xff09 的开发 更新 测试 运维等 也就是说你能从 RHEL
  • vscode配置C/C++调试环境

    转自作者知乎的原创文章 vscode配置C 43 43 调试环境 在环境变量path中添加mingw中bin后 在vscode界面侧边栏点击调试界面 xff0c 创建launch json文件 添加配置后保存就行 下为我的添加配置后自动生成
  • ROS通信机制~话题通信(Publisher&Subscriber)·笔记2

    系列文章目录 xff1a ROS开发 xff08 ubuntu xff09 笔记 1 嘻 嘻的博客 CSDN博客 ROS通信机制 服务通信 server amp client 笔记3 嘻 嘻的博客 CSDN博客 话题通信 理论模型 xff1
  • postman Windows的详细安装过程

    1 首先去postman官网下载postman 官网地址 xff1a Download Postman Get Started for Free https www postman com downloads 2 根据你浏览器下载的所在位置
  • 数据结构链表的结构体定义的理解(C语言)

    此理解有参考数据结构的教材和一些博主的文章 xff1b 1 先补充一下typedef在此处的基本用法 xff1a typedef可用来建立已经定义好的数据类型的别名 形式为 xff1a typedef 已有变量名 别名 通俗的来说就是给已有
  • ROS安装与Rviz的摄像头视频采集与标定

    文章目录 一 ROS的安装与配置1 添加 ROS 软件源 xff0c 将下列命令输入到 Ubuntu 的终端执行2 添加密钥 xff0c 将下列命令输入到 Ubuntu 的终端执行3 安装desktop full4 初始化rostep5 设
  • HTTP协议的基本格式

    目录 一 HTTP请求 1 1 首行 1 1 1 URL 1 1 2 方法 1 2 请求报头 xff08 header xff09 1 2 1 host 编辑 1 2 2 Content Length和Content Type 1 2 3
  • 思岚雷达win与ubuntu18.04连接并测试详细过程

    雷达简介 包含套件 雷达模组 xff08 内置pwm电机驱动 xff09 usb适配器 Micro USB线缆 电源线 接线方式 ps 雷达不需额外的电源供电 xff0c 直接使用电脑USB接口 xff0c 5V供电 驱动安装 USB 适配
  • c/c++常见字符串函数(strlen,strcmp,strcat,strcpy,strstr,strncpy,strncat,strncmp)的详解和自己编辑实现

    下面介绍c语言中指针与数组的面试题 再看下列题之前首先要知识储备 下面用c语言介绍常用字符串函数和进行编译 一 介绍strlen函数 unsigned int strlen char s 或size t strlen const char
  • 【C语言】学数据结构前必学的结构体struct详细

    佛祖说 xff0c 他可以满足程序猿一个愿望 程序猿许愿有生之年写出一个没有bug的程序 xff0c 然后他得到了永生 目录 1 结构体的声明与定义 1 1结构体是什么 xff1f 1 2为什么要有结构 xff1f 1 3结构体的声明 1
  • 数据结构哈希查找的C语言实现

    大家好 xff0c 我是练习编程时长两年半的昆工第一ikun xff0c 今天我们来分享查找算法中的一个 哈希查找 xff0c 哈希查找适用于有庞大的数据量时的查找 xff0c 是一种很好用的查找算法 xff0c 话不多说 xff0c 开团
  • 为什么很多程序员喜欢linux系统?

    a gt Linux哪些行业在运用 xff1f Linux系统运用极其广泛 xff0c 不少用户只知道windows xff0c 是因为 xff0c Linux的运用主要是在企业端 现在科技极其发达 xff0c 我们手机在手 xff0c 就
  • Linux Ubuntu下的标准IO相关库函数的介绍与使用

    大家好 xff0c 我是练习编程时长两年半的个人练习生昆工第一ikun xff0c 今天我们来分享一下标准IO相关函数库的介绍与使用 xff0c 话不多话 xff0c 开团 xff01 xff01 xff01 xff01 xff01 目录