嵌入式Linux基础——目录操作命令、时间编程附小试身手题目

命令提示符

在这里插入图片描述
家目录是什么?Linux系统是纯字符界面,用户登录后,要有一个初始登录的位置,这个初始登录位置就称为用户的家。

●超级用户的家目录:/root/
●普通用户的家目录:/home/用户名/

用户在自己的家目录中拥有完整权限

常用命令

ls

ls是最常见的目录操作命令,主要作用是显示目录下的内容。
在这里插入图片描述
在这里插入图片描述

命令格式

在这里插入图片描述
-a选项中的a是all的意思,也就是显示隐藏文件。在Linux中以“.”开头的文件是隐藏文件,只有通过“-a”选项才能查看。
-l”是长格式(long list)的意思,也就是显示文件的详细信息。
在这里插入图片描述
我们已经知道“-l”选项用于显示文件的详细信息,那么“-l”选项显示的这7列分别是什么含义?
在这里插入图片描述
-d 这个命令会显示目录下的内容,而不会显示这个目录本身的详细信息。如果想显示目录本身的信息,就必须加入“-d”选项。
在这里插入图片描述
“ls -l”显示的文件大小是字节,但是我们更加习惯的是千字节用KB显示,兆字节用MB显示,而“-h”选项就是按照人们习惯的单位显示文件大小的
在这里插入图片描述
“-i”选项每个文件都有一个被称作inode(i节点)的隐藏属性,可以看成系统搜索这个文件的ID,而“-i”选项就是用来查看文件的inode号的
在这里插入图片描述

cd

在这里插入图片描述
Linux的命令按照来源方式分为两种:Shell内置命令和外部命令。所谓Shell内置命令,就是Shell自带的命令,这些命令是没有执行文件的;而外部命令就是由程序员单独开发的,是外来命令,所以会有命令的执行文件。Linux中的绝大多数命令是外部命令,而cd命令是一个典型的Shell内置命令,所以cd命令没有执行文件所在路径。

命令格式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

绝对路径、相对路径

在这里插入图片描述
在这里插入图片描述

tar

在这里插入图片描述

打包命令

在这里插入图片描述

解打包命令

在这里插入图片描述

-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件

这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。

-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出

目录结构

在这里插入图片描述
在这里插入图片描述

tm源码分析

在/usr/include/time.h中找到tm结构体定义的源码
在这里插入图片描述
在这里插入图片描述
tm_sec的范围允许临时闰秒或双闰秒。

time_t

通常能确定时间和日期对一个程序来说是非常有用的。程序可能希望记录它运行的时间,或者可能需要在某些时候改变它的运行方式。例如,一个游戏可能拒绝在工作时间运行,或者一个定时备份程序可能想等到每天的凌晨才开始一个自动备份。

所有的UNIX系统都使用同一个时间和日期的起点:格林尼治时间(GMT)1970年1月1日午夜(0点)。这是“UNIX纪元的起点”, Linux也不例外。Linux系统中所有的时间都以从那时起经过的秒数来衡量。这和MS-DOS处理时间的方法类似,只是MS-DOS纪元始于1980年。其他系统使用其他的纪元起始时间。

时间通过一个预定义的类型time_t来处理。这是一个大到能够容纳以秒计算的日期和时间的整数类型。在Linux系统中,它是一个长整型,与处理时间值的函数一起定义在头文件time.h中。
在这里插入图片描述

实验time函数

下面这个简单的程序envtime.c演示了time函数的用法:

#include<time.h>
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>

int main()
{
        int i;
        time_t tt;
        
        for(i = 1; i <= 10; i++)
        {
                tt = time(NULL);
                printf("The time is %ld\n", tt);
                sleep(2);
        }
        exit(0);
}

在这里插入图片描述
运行这个程序,它会在20秒时间内每两秒钟打印一次底层的时间值。
在这里插入图片描述
这个程序用一个空指针参数调用time函数,返回以秒数计算的时间和日期。程序休眠两秒后再重复调用time函数,总共调用10次。

以从1970年开始计算的秒数来表示时间和日期,对测算某些事情持续的时间是很有用的。你可以把它考虑为简单地把两次调用time得到的值相减。然而ISO/ANSIC标准委员会经过审议,并没有规定用time_t类型来测量任意时间之间的秒数,他们发明了一个函数difftime,该函数用来计算两个time_t值之间的秒数并以double类型返回它。
在这里插入图片描述
在这里插入图片描述

实验gmtime函数

下面这个程序ggtime.c利用tm结构和gmtime函数打印出当前时间和日期:

#include<time.h>
#include<stdio.h>
#include<stdlib.h>

int main()
{
        struct tm *tm_ptr;
        time_t tt;

        time(&tt);
        tm_ptr = gmtime(&tt);

        printf("Raw time is %ld\n", tt);
        printf("gmtime gives:\n");
        printf("date:%02d/%02d/%02d\n", tm_ptr->tm_year, tm_ptr->tm_mon+1, tm_ptr->tm_mday);
        printf("time:%02d:%02d:%02d\n", tm_ptr->tm_hour, tm_ptr->tm_min, tm_ptr->tm_sec);
        exit(0);
}

在这里插入图片描述
在这里插入图片描述
这个程序调用time函数得到底层的时间值,然后调用gmtime将该值转换为一个包含有用的时间和日期值的结构。最后,程序用printf将这些信息打印出来。严格来说,你不应该用这种方法打印原始时间值,因为我们并不能保证它在所有系统上都是long类型的值。我们在运行gmtime程序后立即运行date命令以比较它们的输出。

不过,这儿有个小问题。如果在格林尼治标准时间(GMT)之外的时区运行这个程序,或者所在的地方像本例中那样采用了夏令时,你会发现时间(可能还有日期)是不对的。这是因为gmtime按GMT返回时间(现在GMT被称为世界标准时间,或UTC)。Linux和UNIX这样做是为了同步全球各地的所有程序和系统。不同时区同一时刻创建的文件都会有相同的创建时间。要看当地时间,你需要使用localtime函数。

localtime

在这里插入图片描述
ggtime.c修改版

#include<time.h>
#include<stdio.h>
#include<stdlib.h>

int main()
{
        struct tm *tm_ptr;
        time_t tt;

        time(&tt);
        tm_ptr = localtime(&tt);

        printf("Raw time is %ld\n", tt);
        printf("localtime gives:\n");
        printf("date:%02d/%02d/%02d\n", tm_ptr->tm_year, tm_ptr->tm_mon+1, tm_ptr->tm_mday);
        printf("time:%02d:%02d:%02d\n", tm_ptr->tm_hour, tm_ptr->tm_min, tm_ptr->tm_sec);
        exit(0);
}
~        

在这里插入图片描述

asctime函数和ctime函数

在这里插入图片描述
在这里插入图片描述

实验ctime函数

在本例中,使用下面的代码来查看ctime函数的用法:

#include<time.h>
#include<stdio.h>
#include<stdlib.h>

int main()
{
        time_t timeval;
        
        time(&timeval);
        printf("The date is:%s", ctime(&timeval));
        exit(0);
}

在这里插入图片描述
在这里插入图片描述

时间编程

timmy.c

#include<stdio.h>
#include<time.h>

int main()
{
        struct tm *ptr;
        time_t lt;
		//获取日历时间
        lt = time(NULL);
		//转化为本地时间
        ptr = localtime(&lt);
		//以本地时间的字符串方式打印
        printf("%s\n", asctime(ptr));
        printf("%s\n", ctime(&lt));
        return 0;
}

在这里插入图片描述

小试身手题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果喜欢我的文章,请记得三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持,下期更精彩!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值