Linux 操作系统非缓冲区的文件操作、时间编程

news2024/11/20 17:39:59

1、文件操作

1.1 基于缓冲区的文件操作

基于缓冲区的文件操作---高级Io

以f开头的是基于缓冲区的文件操作

printf是一个基于缓冲区的函数

输出条件:
        1.程序正常运行

        2.遇到换行\n也能输出

        3.缓存区内存已满  1024大小

        4.遇到fflush(stdout)

1.打开文件 FILE *fopen();

2.读写        形参        fwrite

3.关闭 fclose

1.2 基于非缓冲区的文件操作

基于非缓冲区的文件操作--低级IO

        1.打开文件  open

        2.读写        write read

        close

        lseek        控制光标位置

1->open

头文件

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
函数原型:
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
形参:

pathname: 文件的路径/文件名
flags: 以下的三个宏定义, 必须选择其一
        O_RDONLY O_WRONLY O_RDWR
        以下的宏定义自由选择:
        O_CREAT -- 如果文件不存在就创建文件, 存在, 不起作用
        O_TRUNC -- 清空
        O_APPEND -- 追加
        O_EXCL: 要求和 O_CREAT 连用, 文件如果不存在, 创建并打开, 如果文件存在, open 直接返回失败( -1)

        由flags决定,如果flags里面有O_CREAT,此时需要提供mode。否则,不用提供

        mode文件的权限:八进制数

最终文件的权限:你提供的mode  &  (~umask)

举例: 0777 真正的权限: 111 111 111 & (111 111 101)
返回值: 成功 int 类型的文件描述符
失败返回-1;
举例:
        打开 1.txt,读写的方式打开, 文件不存在, 创建, 文件存在, 清空写
        open(“1.txt”,O_RDWR|O_CREAT|O_TRUNC,);

2->关闭文件

头文件:#include <unistd.h>
函数原型:int close(int fd);
形参: open 的返回值
返回值: close() returns zero on success. On error, -1 is returned

3->写

头文件:#include <unistd.h>

函数原型:ssize_t write(int fd, const void*buf, size_t count);

形参:

        fd : open的返回值

        buf:要写入的内容的首地址 

        count:写入的字节数

返回值:成功返回真正写入的字节数,失败返回-1;

4->读--read

头文件:#include<unistd.h>

函数原型:ssize_t read(int fd, void *buf, size_t count);

形参:fd : open 的返回值

        buf:读取到的内容存放的位置,提供空间即可

        count:要读取的字节数

返回值:成功返回真正读取到的字节数

失败返回-1

5-光标偏移函数--lseek

头文件:

#include <sys/types.h>
#include <unistd.h>

函数原型:off_t lseek(int fd, off_t offset,int whence);

形参:
        fd: open 的返回值
        offset: 偏移量 +n 往文件末尾方向偏移 n 字节
        -n 往文件开头方向偏移 n 字节
        whence: 偏移时的参考位置
        SEEK_SET 文件开头
        SEEK_CUR 文件当前位置
        SEEK_END 文件末尾
        返回值: 执行操作之后, 光标位置距离文件开头的偏移量
        求文件大小:
        off_t size = fseek(fd,0,SEEK_END);


2、 时间编程


1、 和时间相关的指令:


1-> date

2>cal


2、 和时间编程相关的 API


1>time -- 获取日历时间 -- 时间的秒数
日历时间: 1970 年 1 月 1 日 0 点 0 分 0 秒举例现在的秒数
#include <time.h>
time_t time(time_t *tloc);
使用:
方式 1: time_t t = 0;
time(&t); t 里面就存放当前的日历时间
方式 2: timt_t t = time(NULL);
time 的返回值就是日历时间;


2>获取本地时间 localtime
#include <time.h>
struct tm *localtime(const time_t *timep);
形参: timep -- 日历时间, 传地址
返回值: struct tm {
int tm_sec; /* 秒 */
int tm_min; /* 分 */
int tm_hour; /* 时 */
int tm_mday; /* Day of the month (1-31) */
int tm_mon; /* Month (0-11)+1 */
int tm_year; /* Year - 1900 +1900 */
int tm_wday; /* Day of the week (0-6, Sunday = 0) */
int tm_yday; /* Day in the year (0-365, 1 Jan = 0) */
int tm_isdst; /* Daylight saving time */
};


3>获取格林威治 gmtime
struct tm *gmtime(const time_t *timep);
形参和返回值和 localtime 一样, 结果中的时间是美国时间


4》 获取时间的字符串 - ctime
char *ctime(const time_t *timep);
形参: timep -- 日历时间, 传地址
返回值: 关于时间的字符串


5》 获取时间的字符串 - asctime
char *asctime(const struct tm *tm);
形参: localtime 或者 gmtime 的返回值
返回值:
关于时间的字符串
如果传参传的是 localtime 的返回值, 关于时间的字符串是准确的
如果传参传的是 gmtime 的返回值, 关于时间的字符串差 8hour


6》 关于时间的字符串
功能: 我们可以根据 format 指向字符串中格式命令把 timeptr 中保存的时间信息放在 strDest 指向的字
符串中, 最多向 strDest 中存放 maxsize 个字符。 该函数返回向 strDest 指向的字符串中放置的字符数。
函数 strftime()的操作有些类似于 sprintf(): 识别以百分号(%)开始的格式命令集合, 格式化输出结果放在一个
字符串中。 格式化命令说明串 strDest 中各种日期和时间信息的确切表示方法。 格式串中的其他字符原样放进串
中。 格式命令列在下面, 它们是区分大小写的。
原型: size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
形参:
s:存放格式化时间字符串
max: 时间字符串最大长度
format: 自定义格式 按照此格式, 放在第一个参数给的字符串中
tm: 时间描述的结构体(gmtime / localtime 返回值)
如果是 gmtime 得到的结构体指针, 时间差 8 小时
如果是 localtime 得到的结构体指针, 时间准确
%a 星期几的简写
%A 星期几的全称
%b 月分的简写
%B 月份的全称
%c 标准的日期的时间串
%C 年份的后两位数字
%d 十进制表示的每月的第几天
%D 月/天/年
%e 在两字符域中, 十进制表示的每月的第几天
%F 年-月-日
%g 年份的后两位数字, 使用基于周的年
%G 年分, 使用基于周的年
%h 简写的月份名
%H 24 小时制的小时
%I 12 小时制的小时
%j 十进制表示的每年的第几天

%m 十进制表示的月份
%M 十时制表示的分钟数
%n 新行符
%p 本地的 AM 或 PM 的等价显示
%r 12 小时的时间
%R 显示小时和分钟: hh:mm
%S 十进制的秒数
char buf[128] = {0}
strftime(buf,sizeof(buf),”%D %S %R”,loctm);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1609698.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【每日刷题】Day19

【每日刷题】Day19 &#x1f955;个人主义&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; 目录 1. 55. 跳跃游戏 - 力扣&#xff08;LeetCode&#xff09; 2. 62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 3. 63. 不同路径…

48-PCIE转串口和并口电路设计

视频链接 PCIE转串口和并口电路设计01_哔哩哔哩_bilibili PCIe转串口和并口电路设计 1、PCIe转串并口电路设计基本介绍 2、PCIe转串口和并口的方案(京东) 2.1、PCIe转串口 2.1.1、ASIX (亚信)MCS9922-PCIe转2路RS232扩展卡 2.1.2、ASIX (亚信)MCS9900-PCIe转4路RS232扩展卡…

【ARM 裸机】I.MX 启动方式之启动头文件 2

接上一节&#xff1a;【ARM 裸机】I.MX 启动方式之启动头文件 1&#xff1b; 2.3、DCD DCD&#xff0c;Device Configuration Data &#xff0c;就是配置 6ULL 寄存器的&#xff0c;DCD 数据最大限制 1768 字节&#xff1b; CCGR0 是不是很熟悉&#xff1f;对&#xff0c;在…

C++实战——日期类的实现

日期类的实现 前言一、日期类概念实现运用场景 二、日期类的具体实现代码构造函数拷贝构造函数获取日期&#xff08;内联函数&#xff09;赋值加等减等加减小于小于等于大于大于等于相等不相等前置后置前置- -后置- -关于类里重载的比较运算符为什么要加外部const示例 Date.hDa…

鸢尾花数据集的KNN探索与乳腺癌决策树洞察

鸢尾花数据集的KNN探索与乳腺癌决策树洞察 今天博主做了这个KNN和决策树的实验。 一.数据集介绍 介绍一下数据集&#xff1a; 威斯康星州乳腺癌数据集&#xff1a; 威斯康星州乳腺癌数据集&#xff08;Wisconsin Breast Cancer Dataset&#xff09;是一个经典的机器学习数…

git 快问快答

我在实习的时候&#xff0c;是用本地开发&#xff0c;然后 push 到 GitHub 上&#xff0c;之后再从 Linux 服务器上拉 GitHub 代码&#xff0c;然后就可以了。一般程序是在 Linux 服务器上执行的&#xff0c;我当时使用过用 Linux 提供的命令来进行简单的性能排查。 在面试的时…

YMP实现Oracle迁移到YashanDB

迁移需求 ip地址 数据库信息 操作系统信息 源库 192.168.3.132 实例名topdh 用户密码TOPICIS/oracle 端口1521 Centos7.9 x86_64 目标库 192.168.3.175 实例名yasdb 用户密码topicist/opicis 端口1688 Centos7.9 x86_64 迁移前准备 YMP工具获取 根据实际需求向厂…

晨昏线学习

看视图记得标自转方向

C语言指针进阶:数组与指针的联系

目录 1. 数组名的本质2. 使用指针访问数组3. 一维数组传参的本质4. 二级指针5. 指针数组5.1 指针数组模拟二维数组 正文开始。 1. 数组名的本质 数组名代表着这个数组中第一个元素的地址 例如&#xff1a; int arr[4] { 1,2,3,4 }; int *p1 &arr[0]; int *p2 arr;上述…

MATLAB R2024a:重塑商业数学软件的未来

在数字化浪潮席卷全球的今天&#xff0c;商业数学软件已经成为企业、研究机构乃至个人不可或缺的工具。而在这其中&#xff0c;MATLAB R2024a以其卓越的性能和广泛的应用领域&#xff0c;正逐步成为商业数学软件的新标杆。 MATLAB R2024a不仅继承了前代版本的优秀基因&#xf…

VirtualBox Manjaro Linux(kde)虚拟机扩容 增大硬盘存储空间

https://blog.csdn.net/m0_65274357/article/details/131965463 df -h发现/可用空间之后几百M了 文件系统 大小 已用 可用 已用% 挂载点 dev 2.0G 0 2.0G 0% /dev run 2.0G 1.2M 2.0G 1% /run /dev/sda1 40G 37…

手把手教你实现 C 语言的函数多参默认值 「上」

以下内容为本人的学习笔记&#xff0c;如需要转载&#xff0c;请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/nj0C9SbAuzUOPt_J1n8B_Q 自从上一篇关于 C 语言单个参数函数的默认值实现《C语言函数也可以给形参添加默认值&#xff1f;》发表以来&#xff0c;…

构建Python中的分布式日志系统:ELK与Fluentd的结合

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在现代软件开发中&#xff0c;日志系统是至关重要的组成部分。它们不仅用于故障排查和性能监…

跟TED演讲学英文:How AI could empower any business by Andrew Ng

How AI could empower any business Link: https://www.ted.com/talks/andrew_ng_how_ai_could_empower_any_business Speaker: Andrew Ng Date: April 2022 文章目录 How AI could empower any businessIntroductionVocabularyTranscriptSummary后记 Introduction Expensiv…

MySQL与Redis缓存一致性的实现与挑战

缓存是提高应用性能的重要手段之一&#xff0c;而 MySQL 和 Redis 是两种常用的数据存储和缓存技术。在许多应用中&#xff0c;常常将 Redis 用作缓存层&#xff0c;以加速对数据的访问。然而&#xff0c;在使用 MySQL 和 Redis 组合时&#xff0c;保持缓存与数据库之间的一致性…

使用 Flask 和 Flask-Login 构建用户认证的 Web 应用程序

在本篇技术博客中&#xff0c;我们将学习如何使用 Flask 框架和 Flask-Login 扩展构建一个具有用户认证功能的简单 Web 应用程序。我们将从创建 Flask 应用实例开始&#xff0c;然后逐步添加用户认证功能。 1. 安装依赖库 首先&#xff0c;确保您已经安装了 Flask、Flask-PyM…

【题解】NC398 腐烂的苹果(多源BFS)

https://www.nowcoder.com/practice/54ab9865ce7a45968b126d6968a77f34?tpId196&tqId40529&ru/exam/oj 从每个腐烂的苹果开始使用广度优先遍历&#xff08;bfs&#xff09; class Solution {int n, m;int dx[4] {0, 0, 1, -1};int dy[4] {1, -1, 0, 0};vector<v…

[AI OpenAI-doc] 微调

学习如何为您的应用程序定制模型。 介绍 微调允许您通过提供以下内容&#xff0c;从 API 提供的模型中获得更多收益&#xff1a; 比提示更高质量的结果能够训练比提示中能容纳的更多示例由于提示更短而节省的标记更低的延迟请求 OpenAI 的文本生成模型已经在大量文本上进行…

ElasticSearch可视化工具:kibana + elasticsearch-head

kibana 下载 地址&#xff1a;https://www.elastic.co/cn/downloads/kibana 下载别的版本&#xff1a;https://www.elastic.co/cn/downloads/past-releases#kibana 将Kibana安装包解压缩 进入config目录&#xff0c;在kibana.yml中添加es服务器地址。&#xff08;如果之前没…

实在Agent:超自动化智能体的革命(附导引指南)

在自动化技术的浪潮中&#xff0c;实在智能推出了实在Agent&#xff08;智能体&#xff09;&#xff0c;一款基于大语言模型和屏幕语义理解技术的超自动化智能体。它通过自然对话交互&#xff0c;将复杂工作简化为一句话指令&#xff0c;自动规划并执行工作任务&#xff0c;极大…