Linux下cal命令C/C++实现(显示日历信息)

news2024/11/18 15:34:43

大多数用户自然会将计算机上的日历视为GUI应用程序,或直接从桌面显示的东西。但也可以在Linux中使用cal命令通过命令行终端查看日历。

如果您通常使用Linux上的桌面环境,或者您来自Windows或MacOS操作系统,可能会认为这是一种过于复杂的日历查看方式。但在Linux中使用cal命令非常简单,实际上是查看日历的最快方法之一。

Linux Cal命令简介

“cal”(日历)命令的主要目的是显示当前或特定月份/年份的当前月份日历。“cal”命令的工作取决于下面给出的语法:

cal [options] [month] [year]

“cal”是命令中的主要关键字,而“options”也可用于获取所需的日历格式/输出。其他方括号显示“月”和“年”。

cal-j 它以“朱利安日历格式”而不是默认的“公历格式”显示当前/特定的月份日历。

cal-3 显示当前、上一个和上一个月的日历。

cal-1 表示与“cal”命令(当前月份的日历)相同的输出。

cal-y表示当前或特定年份的日历,即“cal-y 1998”显示1999年的日历。

cal-A 一个数字它显示当前月份以后几个月的日历。 

cal-B 显示当前月份的前几个月的日历。

cal-mm-yyyy显示当前/特定月份和年份的日历。

cal-m month表示特定月份的日历。

要获取有关“cal”命令的完整信息,请在终端中使用以下“man cal”命令.

如何在Linux中使用cal命令?

通常,“cal”命令只显示当前月份或全年日历。

但是如果我们在“cal”命令中使用一些参数或选项,它可以提供一些特定的输出。本节包括可用于根据要求获得特定输出的不同选项的各种示例。

  • 显示朱利安日历

如果我们使用“cal -j”命令,它将以“Julian”格式显示日历,其中新月份的日期不以1开头。“cal -j”命令的输出如下:

  • 显示上一个、当前和即将到来的月份日历

cal -3命令用于显示三个月的日历,包括当前月、上一个月和下一个月:

  • 显示当前和上一个月的日历

“cal-B num”命令用于显示上一个月的日历。“cal-B num”命令中的“num”显示特定月份。假设“cal-B 2”命令显示前两个月的日历:

  • 仅显示当前月份

“cal-1”命令用于显示与“cal”命令相同的当月日历:

  • 显示特定年份日历

“cal-y year”命令用于获取特定年份的日历。例如,下面提供的命令将打印“2015”年的日历:

  • 显示未来几个月

“cal -A num”命令显示接下来几个月的日历。在此命令中,“num”定义任何数字。假设“cal -A 5”命令同时显示未来五个月和当前月份的日历:

  • 显示特定年份的特定月份

“cal-mm-yyyy”命令用于显示特定的月份和年份日历。在此命令中,“mm”表示月,“yyyy”表示年。假设“cal 09 208”命令显示2018年9月日历:

Linux下cal命令C/C++实现

...
int main(int argc, char **argv)
{
...
	while ((ch = getopt(argc, argv, "A:B:C:d:hjR:ry3")) != -1) 
	{
		switch (ch) 
		{
			case 'A':
				after = getnum(optarg);
				if (after < 0)
					errx(1, "Argument to -A must be positive");
				break;
			case 'B':
				before = getnum(optarg);
				if (before < 0)
					errx(1, "Argument to -B must be positive");
				break;
			case 'C':
				after = before = getnum(optarg);
				if (after < 0)
					errx(1, "Argument to -C must be positive");
				break;
			case 'd':
				dow = getnum(optarg);
				if (dow < 0 || dow > 6)
					errx(1, "illegal day of week value: use 0-6");
				break;
			case 'h':
				init_hilite();
				break;
			case 'j':
				julian = 1;
				break;
			case 'R':
				when = optarg;
				break;
			case 'r':
				use_reform = 1;
				break;
			case 'y':
				yflag = 1;
				break;
			case '3':
				before = after = 1;
				break;
			case '?':
			default:
				usage();
				/* NOTREACHED */
		}
	}

	argc -= optind;
	argv += optind;

	if (when != NULL)
		gregorian_reform(when);
	if (reform == NULL)
		gregorian_reform("DEFAULT");

	month = 0;
	switch (argc) 
	{
		case 2:
			month = strtol(*argv++, &eoi, 10);
			if (month < 1 || month > 12 || *eoi != '\0')
				errx(1, "illegal month value: use 1-12");
			year = strtol(*argv, &eoi, 10);
			if (year < 1 || year > 9999 || *eoi != '\0')
				errx(1, "illegal year value: use 1-9999");
			break;
		case 1:
			year = strtol(*argv, &eoi, 10);
			if (year < 1 || year > 9999 || (*eoi != '\0' && *eoi != '/' && *eoi != '-'))
				errx(1, "illegal year value: use 1-9999");
			if (*eoi != '\0') {
				month = strtol(eoi + 1, &eoi, 10);
				if (month < 1 || month > 12 || *eoi != '\0')
					errx(1, "illegal month value: use 1-12");
			}
			break;
		case 0:
			(void)time(&now);
			local_time = localtime(&now);
			if (use_reform)
				year = reform->year;
			else
				year = local_time->tm_year + TM_YEAR_BASE;
			if (!yflag) 
			{
					if (use_reform)
						month = reform->month;
					else
						month = local_time->tm_mon + 1;
			}
			break;
		default:
			usage();
	}

	if (!month) 
	{
		
		month = 1;
		before = 0;
		after = 11;
		yearly = 1;
	}

...
}
...

运行结果


If you need the complete source code of cal, please add WeChat number (c17865354792)​

总结

基本上,cal是命令行实用程序,用于在Linux终端窗口上打印月或年日历信息。cal命令将接受日期和年份参数的不同兼容选项。

Welcome to follow WeChat official account【程序猿编码

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

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

相关文章

RFID技术在固定资产管理中的作用

固定资产因具有数量庞大、分布广、变动频繁等特点造成管理难度较大&#xff0c;一直成为企业管理的一大重点。固定资产管理包括资产的新增、调拨、闲置、报废、维修、盘点等操作&#xff0c;让投入使用到报废退出使用的全过程进行全面的信息化管控。以往固定资产的一直由于管理…

AlexNet详解

入门小菜鸟&#xff0c;希望像做笔记记录自己学的东西&#xff0c;也希望能帮助到同样入门的人&#xff0c;更希望大佬们帮忙纠错啦~侵权立删。 ✨完整代码在我的github上&#xff0c;有需要的朋友可以康康✨ GitHub - tt-s-t/Deep-Learning: Store some of your own in-depth …

Python学习笔记——起步

Python 2 和 Python 3的区别 一、维护及版本更新不同 官方通知python2 2020开始已不再维护&#xff0c;python3的版本还在不断迭代更新 。 因为python2官方不再维护且python3的广泛使用&#xff0c;很多新的算法包、AI包等其他功能模块包都是基于python3开发的&#xff0c;p…

LaTeX使用方法

1.工具 1.生成表格&#xff1a;LaTeX Tables Editor 2.生成公式&#xff1a;Online LaTeX Equation Editor 、texmath demo、在线LaTeX公式编辑器-编辑器 2.技巧 1.插入图片&#xff1a; \begin{figure}[t] %t表示图片置顶&#xff0c;h表示指定位置&#xff0c;b表示置底…

条件分支if和else的使用详解

顺序结构没什么好讲的&#xff0c;就是从上到下的写代码&#xff0c;所以接下来&#xff0c;壹哥就直接带各位来学习分支结构里的条件分支。我们在前面说过&#xff0c;分支结构&#xff0c;或者叫做条件分支&#xff0c;其实有两种情况。一种是if...else...类型的条件分支&…

vue组件通信6种方式总结(常问知识点)

前言 在Vue组件库开发过程中&#xff0c;Vue组件之间的通信一直是一个重要的话题&#xff0c;虽然官方推出的 Vuex 状态管理方案可以很好的解决组件之间的通信问题&#xff0c;但是在组件库内部使用 Vuex 往往会比较重&#xff0c;本文将系统的罗列出几种不使用 Vuex&#xff…

X.509证书详解

概述 X.509是公钥基础设施&#xff08;PKI&#xff09;的标准格式。X.509证书就是基于国际电信联盟&#xff08;ITU&#xff09;制定的X.509标准的数字证书。X.509证书主要用于识别互联网通信和计算机网络中的身份&#xff0c;保护数据传输安全。X.509证书无处不在&#xff0c…

Spring之底层架构核心概念-过滤器

文章目录1.excludeFilters:排除过滤器2.includeFilters:包含过滤器3.问题&#xff1a;spring为什么能通过是否有Component注解来判断是否需要去注册bean呢&#xff1f;3.1 看源码3.2 原因4.总结1.excludeFilters:排除过滤器 用excludeFilters排除UserService 这个类后&#xf…

nature级别图表:单细胞转录组细胞比例统计可视化函数

单细胞转录组细胞比例&#xff1a; 关于单细胞比例的计算和作图我们之前出过3期&#xff0c;单细胞比例的展示是很多单细胞文章必不可少的内容&#xff1a;跟着Cell学单细胞转录组分析(六):细胞比例计算及可视化 相信跟着学习的小伙伴已经掌握了。最近学习一篇《nature medici…

JavaScript 数组-概念,创建数组,遍历数组,新增元素

JavaScript 数组-概念&#xff0c;创建数组&#xff0c;遍历数组&#xff0c;新增元素 目录JavaScript 数组-概念&#xff0c;创建数组&#xff0c;遍历数组&#xff0c;新增元素1. 数组的概念2. 创建数组2.1 数组的创建方式2.2 利用 new 创建数组2.3 利用数组字面量创建数组2.…

模式分类识别 | BiLSTM双向长短期记忆神经网络数据多特征分类预测(Matlab完整程序)

模式分类识别 | BiLSTM双向长短期记忆神经网络数据多特征分类预测(Matlab完整程序) 目录 模式分类识别 | BiLSTM双向长短期记忆神经网络数据多特征分类预测(Matlab完整程序)分类结果基本介绍程序设计参考资料分类结果

深度学习实验(五)——循环神经网络编程

深度学习实验五:循环神经网络编程 本次实验练习使用torch.nn中的类设计一个循环神经网络进行MNIST图像分类。 在本次实验中&#xff0c;你要设计一个CNN&#xff0c;用于将282828 \times 282828的MNIST图像转换为MMDM\times M\times DMMD的特征图&#xff0c;将该特征图看作是…

我,做了两年程序员,存了巨款5000,你们拿什么跟我比?

&#x1f550;没错&#xff0c;标题所见&#xff0c;从21年1月份开始从事程序员工作也过了两年了&#xff0c;今年还是没有存到钱。 今年换了一份工作&#xff0c;四月份的时候&#xff0c;从惠州换到了广州工作&#xff0c;从制造业转行到了政务行业&#xff0c;工资涨了&…

Keithley 2604B数字源表-安泰测试

Keithley 2600B 系列系统 SMU 仪器是业界标准电流-电压源和测量解决方案&#xff0c;适用于高度自动化生产测试应用。 双通道和单通道型号都紧密集成一个精密电源、真正电流源、数字万用表和具有脉冲生成功能的电子负载。 另外&#xff0c;TSP? 技术可运行完整测试程序&#x…

多点双向重发布的应用

目录 1.拓扑图 2.实验思路 3.主要配置 4.测试 5.实验总结 1.拓扑图 2.实验思路 在配置完RIP和OSPF之后&#xff0c;在2&#xff0c;3号设备上进行多点的双向重发布由于在进行了多点的双向重发布之后&#xff0c;会出现大量的负载均衡&#xff0c;导致选路不佳的问题解决办…

前端工程师leetcode算法面试必备-二叉树深度广度遍历

一、前言 Medium 难度主要考察结合二叉树性质的 CRUD 操作&#xff0c;而这一切的基础都离不开遍历二叉树。 二叉树是图的子集&#xff0c;因而同样适用以下两种搜索思想&#xff1a; **DFS&#xff08;深度优先搜索&#xff09;&#xff1a;**沿着根节点递归下去&#xff0c…

普通程序员怎么赚多份钱?解锁更多赚钱新姿势

在当下这个社会&#xff0c;学会如何make money很重要。 咱们是个俗人&#xff0c;赚钱才是社会生存的头等大事。这不是高山流水的世界&#xff0c;而是能力创造财富&#xff0c;对于程序员来说&#xff0c;更是如此。 作为程序员&#xff0c;我们有更多挣钱的姿势&#xff01;…

通过一个测试项目了解EF CORE

首先用vs2019创建一个.net core项目 可以是控制台应用程序,也可以是asp.net core项目 如果你使用控制台应用程序, 则可以在Main方法中直接使用EF Core进行CRUD操作。这通常用于测试或开发时快速进行数据库操作。 如果你使用ASP.NET Core应用程序, 则可以在控制器中使用EF Cor…

低温超导系统中实现液氦温度准确控制的解决方案

摘要&#xff1a;针对目前两种典型低温超导测试系统中存在的液氦压力控制精度较差的问题&#xff0c;本文提出了相应的解决方案。解决方案分别采用了直接压力控制和流量控制两种技术手段和配套数控阀门&#xff0c;结合24位AD和16位DA的超高精度的PID真空压力控制器和压力传感器…

第三十九章 贪心算法——区间问题(下)

第三十九章 贪心算法——区间问题&#xff08;下&#xff09;一、区间问题1&#xff1a;最大不相交区间数量1、思路详解2、代码实现二、区间问题2&#xff1a;区间覆盖1、问题2、思路3、代码一、区间问题1&#xff1a;最大不相交区间数量 1、思路详解 这道题和前一章讲的最后一…