目录

1、标准IO

标准IO的特点如下:

2、流

(1)什么是流

(2)流的类型

3、缓冲区

(1)、缓冲区类型

(2)、特殊流

(3)、相关库函数

4、文件定位

5、代码实现

6、结果展示


1、标准IO

标准IO遵循ANSI C标准,标准IO实际上是调用标准C库中的函数

标准IO的特点如下:

标准IO利用缓冲机制,减少系统调用次数,从而提高程序运行效率。

标准IO是高级IO,文件IO是低级IO
           标准IO是在文件IO的基础上做的一次再封装
           标准IO一般用于操作普通文件


2、流

(1)什么是流

数据仅是简单的从文件进行流入、流出,我们把这种现象称为流

流在文件中用FILE结构体描述

struct _IO_FILE
{
    char *_IO_buf_base;//缓冲区开始
    char *_IO_buf_end;//缓冲区结束
    int _fileno;//文件描述体
}

查找FILE结构体:grep -r "_IO_FILE" /usr/include/
/usr/include/下为头文件

在一个程序中,一个FILE结构体对应一个文件

(2)流的类型

流的类型有两种:文本流、二进制流,但再Linux下我们不进行区分。

(1)文本流
    将数据转换为对应的ASCII码再进行存取
    "1234"
    49 50 51 52

(2)二进制流
    将数据转换为二进制再进行存取
    "1234"
    124 -> 100 1101 0010

(3)文本流和二进制流处理换行符的方式不同
    文本流:
        将换行符转换为'\r'\n'

二进制流:
        不做处理
    
    在Linux中,没有对文本流和二进制流做区分,换行符不做任何处理


3、缓冲区

(1)、缓冲区类型

​    (1)全缓冲:打开一个文件默认使用全缓冲,当缓冲区满或者空时,才进行实际的IO操作​ (2)行缓冲:当输入输出跟终端相关时使用行缓冲,当缓冲区满或者遇到换行符时才进行实际的IO操作​  (3)无缓冲:跟错误输出相关时使用无缓冲

(2)、特殊流

标准输入流   --  stdin       --    键盘​标准输出流   --  stdout    --    终端​标准错误流   --  stderr   

(3)、相关库函数

fopen() / fclose()   -- 打开/关闭文件​fgetc() / fputc()  -- 按字节读写文件​fgets() / fputs()  -- 按行读写文件​fread() / fwrite() -- 按对象读写文件​ftell() / fseek() / rewind()  -- 定位文件​fflush()  -- 刷新流​feof()  -- 判断错误流

4、文件定位

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

5、代码实现

/*===============================================================
*   Copyright (C) 2022 All rights reserved.
*
*   文件名称:time_file.c
*   创 建 者:QiuCC
*   创建日期:2022年08月04日
*   描    述:
*
*   更新日志:
*
================================================================*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h>
#include <time.h>
#define N 100int main(int argc, char *argv[])
{time_t now_time;//定义存放时间的变量time(&now_time);//获取时间对应的秒数struct tm *now = localtime(&now_time);//使用localtime()换算得到当前时间FILE *fp = fopen("1.txt", "a+");if(NULL == fp){perror("open file");return 0;}/**************************找到上一次写入的最后一行的行号*********************************/    fseek(fp, 0, SEEK_SET);int L_num = 0;char buf[N] = {0};fgets(buf, N, fp);while(fgets(buf, N, fp) != NULL){if(buf[strlen(buf) - 1] == '\n'){L_num++;memset(buf, 0, N);}}
/************************************文件写入的实现**************************************/if(L_num != 0){L_num++;}int i = L_num;int sec = now->tm_sec;while(1){if(i - L_num == 10){//记录十秒的时间break;}sec = now->tm_sec;time(&now_time);//获取时间对应的秒数now = localtime(&now_time);//使用localtime()换算得到当前时间if(sec+1 == now->tm_sec){printf("第%d行:%d年%d月%d日%d时%d分%d秒\n", i, now->tm_year+1900, now->tm_mon+1, now->tm_mday, now->tm_hour, now->tm_min, now->tm_sec);fprintf(fp, "第%d行:%d年%d月%d日%d时%d分%d秒\n", i, now->tm_year+1900, now->tm_mon+1, now->tm_mday, now->tm_hour, now->tm_min, now->tm_sec);//用于向文件写入数据i++;}}return 0;
}

6、结果展示

运行三次

文件内容

结果显示我们的文件操作是正确的!!!

以上就是本期内容,欢迎大家参考指正!!!

Linux标准IO实现每一秒打印一次时间到指定文件相关推荐

  1. linux 一次io大小,Linux——标准IO篇

    主要知识点: 标准IO(fopen.perror.fputc.fgetc,stdin.三种缓冲区.读写偏移.fseek.ftell.fgets.fputs) [主要内容] [1]IO IO: inpu ...

  2. linux 标准IO缓冲机制探究

    一.什么是缓存I/O(Buffered I/O) 缓存I/O又被称作标准I/O,大多数文件系统默认I/O操作都是缓存I/O.在Linux的缓存I/O机制中,操作系统会将I/O的数据缓存在文件系统的页缓 ...

  3. linux标准IO实验,Linux系统编程(第三篇) 标准IO.pdf

    第三章:标准I/O 目标: 本章旨在向学员介绍Linux系统 时间:3 学时 I/O相关函数的使用: 1)掌握I/O相关函数的特点及使 教学方法:讲授PPT 用方法 2 )了解I/O与系统调用相关的函 ...

  4. Linux标准IO定位函数,Linux C标准IO库函数详解 一

    1.open/close函数 open函数可以打开或者创建一个文件. #include #include #include int open(const char *pathname, int fla ...

  5. C语言--使用fopen、fgets、fprintf(标准IO)实现注册、登录、功能--(完整代码-分文件)

    目录 功能 使用到的函数: 代码如下 main.c login.c login.h 功能 将注册的用户名密码,保存到本地文件中(User.txt)(创建在当前执行目录下了) 对文件的新建,打开,读写, ...

  6. Linux_标准IO

    文章目录 1.标准IO 1.1什么是FILE 1.2fopen的使用 1.3fclose的使用 1.4关于错误码的问题 1.4.1strerror函数的使用 1.4.2perror函数的使用 1.5f ...

  7. 应用编程课程4.系统IO和标准IO的比较,自己做的一些理解,仅仅方便自己看

    /* 1.注意fseek实际上是调用lseek来实现的, 比较以下标准io与文件io的区别 注意:在stream这个概念中,有三个标准流stdin.stdout.stderr,,在我们当前这个文件描述 ...

  8. Linux文件 IO 和标准 IO简介

    文件 IO 是 Linux 系统提供的接口, 针对文件和磁盘进行操作, 不带缓存机制: 标准 IO 是 C 语言函数库里的标准 I/O 模型, 在 stdio.h 中定义, 通过缓冲区操作文件, 带缓 ...

  9. Linux后台开发系列之「13.标准 IO 库」

    StdIO.png 版权声明:本文为 cdeveloper 原创文章,可以随意转载,但必须在明确位置注明出处! 标准 IO 库 上一篇文章我们学习了 5 个底层的 IO 函数,这次我们来学习标准的 I ...

最新文章

  1. 多视图立体匹配论文分享:P-MVSNet
  2. mysql查询cpu使用率100%_数据库CPU使用率100% 排查记
  3. 用git rebase合并
  4. iOS NSMutableAttributedString常用方法总结
  5. mysql多客户端数据不同步_一种多终端设备上的数据同步方法
  6. SAP License:SAP中的报表利器Report Painter
  7. 2020蓝桥杯校内模拟赛1-5(详细版本,看完就会)
  8. 涿州有没有java_谁说涿州没有方言?
  9. CentOS6.5 firefox安装flash插件
  10. mysql找出最大的天数_mysql 计算连续登录最大天数
  11. 专利电子申请那些事儿 |入股不亏 |专利代理 |CPC客户端
  12. Rockchip RK3288 Datasheet芯片手册资料
  13. 翻译软件-好用的翻译软件-免费翻译软件大全
  14. Hadoop安装snappy(编译源码)
  15. python爬虫之使用Scrapy框架编写爬虫
  16. 运算器和控制器构成了微型计算机的主机,运算器和控制器构成了微型计算机的主机...
  17. 2019「友盟杯」数据分析大赛结果公布
  18. 皮肤样本微生物的检测介绍
  19. Vbs脚本将本地文件上传到Azure存储账户
  20. 信息安全管理 读书笔记

热门文章

  1. 科创板开市两周年 | 2021最具创新力科创板上市公司、最具价值科创板上市公司等榜单揭晓...
  2. vue 项目使用three.js 实现3D看房效果
  3. 【自动化测试-Katalon】Katalon的安装和对Windows程序的测试
  4. 你鼓舞了我是世界杯主题曲吗_10篇关于开放式领导原则的鼓舞人心的书
  5. 视频教程-沐风老师3DMAX编织建模视频课程-3Dmax
  6. float函数python作用_python函数每日一讲 - float函数类型转换详解|python教程|python入门|python教程...
  7. Linux系统 安全加固
  8. 现场记录:Oracle年月补零方法;Oracle yyyy-m转yyyy-mm方法。
  9. Python 3中的Itertools,例如
  10. 4k视频分辨率的码流_视频的分辨率、码率、帧率你都了解吗,如何设置才更好?...