Linux标准IO实现每一秒打印一次时间到指定文件
目录
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实现每一秒打印一次时间到指定文件相关推荐
- linux 一次io大小,Linux——标准IO篇
主要知识点: 标准IO(fopen.perror.fputc.fgetc,stdin.三种缓冲区.读写偏移.fseek.ftell.fgets.fputs) [主要内容] [1]IO IO: inpu ...
- linux 标准IO缓冲机制探究
一.什么是缓存I/O(Buffered I/O) 缓存I/O又被称作标准I/O,大多数文件系统默认I/O操作都是缓存I/O.在Linux的缓存I/O机制中,操作系统会将I/O的数据缓存在文件系统的页缓 ...
- linux标准IO实验,Linux系统编程(第三篇) 标准IO.pdf
第三章:标准I/O 目标: 本章旨在向学员介绍Linux系统 时间:3 学时 I/O相关函数的使用: 1)掌握I/O相关函数的特点及使 教学方法:讲授PPT 用方法 2 )了解I/O与系统调用相关的函 ...
- Linux标准IO定位函数,Linux C标准IO库函数详解 一
1.open/close函数 open函数可以打开或者创建一个文件. #include #include #include int open(const char *pathname, int fla ...
- C语言--使用fopen、fgets、fprintf(标准IO)实现注册、登录、功能--(完整代码-分文件)
目录 功能 使用到的函数: 代码如下 main.c login.c login.h 功能 将注册的用户名密码,保存到本地文件中(User.txt)(创建在当前执行目录下了) 对文件的新建,打开,读写, ...
- Linux_标准IO
文章目录 1.标准IO 1.1什么是FILE 1.2fopen的使用 1.3fclose的使用 1.4关于错误码的问题 1.4.1strerror函数的使用 1.4.2perror函数的使用 1.5f ...
- 应用编程课程4.系统IO和标准IO的比较,自己做的一些理解,仅仅方便自己看
/* 1.注意fseek实际上是调用lseek来实现的, 比较以下标准io与文件io的区别 注意:在stream这个概念中,有三个标准流stdin.stdout.stderr,,在我们当前这个文件描述 ...
- Linux文件 IO 和标准 IO简介
文件 IO 是 Linux 系统提供的接口, 针对文件和磁盘进行操作, 不带缓存机制: 标准 IO 是 C 语言函数库里的标准 I/O 模型, 在 stdio.h 中定义, 通过缓冲区操作文件, 带缓 ...
- Linux后台开发系列之「13.标准 IO 库」
StdIO.png 版权声明:本文为 cdeveloper 原创文章,可以随意转载,但必须在明确位置注明出处! 标准 IO 库 上一篇文章我们学习了 5 个底层的 IO 函数,这次我们来学习标准的 I ...
最新文章
- 多视图立体匹配论文分享:P-MVSNet
- mysql查询cpu使用率100%_数据库CPU使用率100% 排查记
- 用git rebase合并
- iOS NSMutableAttributedString常用方法总结
- mysql多客户端数据不同步_一种多终端设备上的数据同步方法
- SAP License:SAP中的报表利器Report Painter
- 2020蓝桥杯校内模拟赛1-5(详细版本,看完就会)
- 涿州有没有java_谁说涿州没有方言?
- CentOS6.5 firefox安装flash插件
- mysql找出最大的天数_mysql 计算连续登录最大天数
- 专利电子申请那些事儿 |入股不亏 |专利代理 |CPC客户端
- Rockchip RK3288 Datasheet芯片手册资料
- 翻译软件-好用的翻译软件-免费翻译软件大全
- Hadoop安装snappy(编译源码)
- python爬虫之使用Scrapy框架编写爬虫
- 运算器和控制器构成了微型计算机的主机,运算器和控制器构成了微型计算机的主机...
- 2019「友盟杯」数据分析大赛结果公布
- 皮肤样本微生物的检测介绍
- Vbs脚本将本地文件上传到Azure存储账户
- 信息安全管理 读书笔记
热门文章
- 科创板开市两周年 | 2021最具创新力科创板上市公司、最具价值科创板上市公司等榜单揭晓...
- vue 项目使用three.js 实现3D看房效果
- 【自动化测试-Katalon】Katalon的安装和对Windows程序的测试
- 你鼓舞了我是世界杯主题曲吗_10篇关于开放式领导原则的鼓舞人心的书
- 视频教程-沐风老师3DMAX编织建模视频课程-3Dmax
- float函数python作用_python函数每日一讲 - float函数类型转换详解|python教程|python入门|python教程...
- Linux系统 安全加固
- 现场记录:Oracle年月补零方法;Oracle yyyy-m转yyyy-mm方法。
- Python 3中的Itertools,例如
- 4k视频分辨率的码流_视频的分辨率、码率、帧率你都了解吗,如何设置才更好?...