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

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.mfbz.cn/a/559163.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ansible-变量-迭代-jinja2模版

变量&#xff1a; 在ansible中&#xff0c;变量是用来存储和传递数据的容器。 这些变量可以包含各种类型的数据&#xff0c;列如数字、字符串、列表、字典。 可以增加ansible playbook的灵活性和重用性变量的使用&#xff1a; 声明&#xff1a;变量名值 引用&#xff1a;{{ 变量…

详细分析Java中的AuthRequest类(附Demo)

目录 前言1. 基本知识2. Demo3. 实战 前言 公共接口&#xff0c;定义了对第三方平台进行授权、登录、撤销授权和刷新 token 的操作 1. 基本知识 先看源码基本API接口&#xff1a; import me.zhyd.oauth.enums.AuthResponseStatus; import me.zhyd.oauth.exception.AuthExce…

提升测试效率,专业方案揭秘

提升测试效率是软件开发中一个永恒的主题&#xff0c;它不仅关乎项目能否按期完成&#xff0c;更影响着软件产品的质量与用户体验。随着敏捷开发、持续集成等方法论的普及&#xff0c;如何在有限的时间内进行高效、全面的测试成为了开发者和测试人员面临的挑战。 在传统模式中&…

Windows 平台上面管理服务器程式的高级 QoS 策略

在 Windows 平台上面&#xff0c;目前有两个办法来调整应用程式的 QoS 策略设置&#xff0c;一种是通过程式设置&#xff0c;一种是通过 “Windows 组策略控制”。 在阅读本文之前&#xff0c;您需要先查阅本人以下的几篇文献&#xff0c;作为前情提示&#xff1a; VC Windows…

数据质量与策略:解锁生成式AI潜力的关键步骤

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

每日一题(L2-011):玩转二叉树--建树+层序遍历

与L2-006近乎相同&#xff0c;先建树&#xff0c;然后遍历 #include<bits/stdc.h> using namespace std; int in[35]; int pre[35]; typedef struct Tree{int num;Tree* left;Tree* right; }T;T * build(int in1,int in2,int pre1,int pre2){T * tnew T;t->numpre[pr…

战姬物语部署

一.准备环境 #关闭seliunx和防火墙 setenforce 0 systemctl stop firewalld systemctl disable firewalld #配置源&#xff0c;并安装常用工 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo curl -o /etc/yum.repos.d/epel.repo …

Leetcode 86. 分隔链表

题目链接&#xff1a; 86. 分隔链表 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/partition-list/description/ 题目&#xff1a; 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出…

深入探究图像增强(C语言实现)

我们将从基础出发使用C语言进行图像处理与分析&#xff0c;重点讨论图像增强和平滑技术。图像增强技术旨在通过增加对比度、亮度和整体清晰度来改善图像的视觉质量。另一方面&#xff0c;图像平滑方法则用于减少噪声并减少图像中的突变&#xff0c;使图像更加均匀和视觉上吸引人…

利用二维码定位技术实现桌面机器人简易定位方案(上篇)

目录 1、前言2、二维码的定位标签识别原理3、生成定位标签3、基于定位标签的物体识别与定位 1、前言 机械手臂尤其是工业场景下大部分的应用是在一个平面&#xff08;桌面&#xff09;内完成一些抓取工作。一般可以用示教方式完成重复步骤。但是示教方式&#xff0c;对于一些活…

过氧化氢滴定方法可用的PFA器皿有哪些?

滴定液:KMnO4标准溶液 试液:H2O2商品液(3%)&#xff0c;H2SO4 (3.0mol/L ) 指示剂:酚酞指示剂 仪器:分析天平&#xff0c;PFA酸式滴定管50mL&#xff0c;PFA 移液管10mL/25mL、PFA 容量瓶250mL、PFA锥形瓶250mL 1、KMnO4标准溶液浓度的标定(见实验:高锰酸钾标准溶液的配制与…

记一次普通的单表查询sql优化,去掉文件排序

一现象&#xff1a; 有空观察了线上某个sql语句执行计划&#xff0c;发现在500多毫秒左右&#xff0c;打算进行下优化。 二步骤&#xff1a; 对查询列assessment_periodic_id、assessment_user_id、create_time添加了组合索引并指定了倒叙。加入create_time 使查询结果不需要在…

阿里云OSS 存储对象的注册与使用

目录 一、什么是阿里云OSS 二、 点击免费试用 2.1 选择第一个&#xff0c;点击免费试用 ​编辑 2.2 登录管理控制台 2.3 进入Bucket 2.4、在阿里云网站上的个人中心配置Accesskey,查询accessKeyId和accessKeySecret。 2.5、进入AccssKey管理页面应该会出现下图提示&…

通用大模型研究重点之五:llama family

LLAMA Family decoder-only类型 LLaMA&#xff08;Large Language Model AI&#xff09;在4月18日公布旗下最大模型LLAMA3&#xff0c;参数高达4000亿。目前meta已经开源了80亿和700亿版本模型&#xff0c;主要升级是多模态、长文本方面工作。 模型特点&#xff1a;采用标准的…

Java面试八股之Java异常处理完成后,Exception对象会发生什么变化

Java异常处理完成后&#xff0c;Exception对象会发生什么变化 这个题的难度在于&#xff0c;看到题之后可能不知道面试官想问什么。在面试中&#xff0c;如果实在没明白&#xff0c;可以让面试官再深入阐述一下。 Java异常处理完成后&#xff0c;Exception对象失去了程序中的…

自定义Blazor单文件Web程序端口

#接 上篇 Mysql快速迁移版的制作过程# 上一篇《Mysql8快速迁移版的制作过程》完成了快速迁移的数据库的准备&#xff0c;今天接着讲基于Blazor的Web程序快速迁移版的制作。 单文件发布的难点不在发布而是因为程序系统默认给了个5001的端口&#xff0c;而是如何能够让用户自定…

Leetcode 11.盛最多水的容器(暴力->双指针)

给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容器。 示例 …

Postman调用OpenApi接口

首先你需要科学上网。。。。。 请求方式&#xff1a;post 请求地址&#xff1a;https://api.openai.com/v1/chat/completions 请求头&#xff1a; Authorization : Bearer key Content-Type : application/json Body : { "messages": [{ "role": &quo…

【精简改造版】大型多人在线游戏BrowserQuest服务器Golang框架解析(1)——功能清单

1.匿名登录 2.服务连接 3.新手引导 4.随机出生点 5.界面布局 6.玩法帮助 7.NPC会话 8.成就系统 9.成就达成 10.用户聊天 11.战斗&信息展示 12.药水使用 13.副本传送 14.玩家死亡 15.超时断开

OpenHarmony 视图缩放组件—subsampling-scale-image-view

简介 深度缩放视图&#xff0c;图像显示&#xff0c;手势平移缩放双击等 效果图&#xff08;旋转、缩放、平移&#xff09; 下载安装 ohpm install ohos/subsampling-scale-image-view OpenHarmony ohpm 环境配置等更多内容&#xff0c;请参考如何安装 OpenHarmony ohpm 包 使…