在Linux C编程中,获取时间是一项常见的任务。无论是在应用程序中获取当前时间、测量程序运行时间或生成时间戳,都需要获取时间。本文将介绍在Linux C编程中如何获取时间,包括系统时间、进程时间和用户时间。
一、系统时间
系统时间是指系统时钟的当前时间。可以通过调用time()函数获取系统时间。time()函数返回自1970年1月1日以来经过的秒数。以下是一个简单的示例:
“`
#include
#include
int mn() {
time_t curr_time;
curr_time = time(NULL);
printf(“当前时间为:%ld\n”, curr_time);
return 0;
}
“`
在上面的示例中,time()函数返回一个time_t类型的值,该类型是一种以秒为单位测量时间的整数类型。可以将返回的值打印出来,也可以使用其他函数将其转换为可读性更好的时间格式。
另外,还有一些与时间相关的函数,例如ctime()和localtime()。ctime()函数可以将time_t类型的值转换为字符串格式,localtime()函数可以将time_t类型的值转换为本地时间的tm结构体类型。以下是使用ctime()和localtime()函数的示例代码:
“`
#include
#include
int mn() {
time_t curr_time;
curr_time = time(NULL);
printf(“当前时间为:%s”, ctime(&curr_time));
struct tm *local_time;
local_time = localtime(&curr_time);
printf(“当前本地时间为:%d-%d-%d %d:%d:%d\n”, local_time->tm_year + 1900,
local_time->tm_mon + 1,
local_time->tm_mday,
local_time->tm_hour,
local_time->tm_min,
local_time->tm_sec);
return 0;
}
“`
在上面的示例中,ctime()返回一个字符串格式的时间表示,该时间表示以C标准格式显示日期和时间。而localtime()函数返回一个tm结构体指针,该结构体包含了年、月、日、小时、分钟和秒等各个组成部分的时间值,可以方便地提取时间信息。
二、进程时间
进程时间是指程序执行消耗的时间。在Linux C编程中,可以使用函数clock(),该函数返回程序执行的CPU时间。以下是一个简单的示例:
“`
#include
#include
int mn() {
clock_t start, end;
double cpu_time_used;
start = clock();
// 执行程序
end = clock();
cpu_time_used = ((double) (end – start)) / CLOCKS_PER_SEC;
printf(“程序执行时间为:%f 秒\n”, cpu_time_used);
return 0;
}
“`
在上面的示例中,使用函数clock()可以获取程序执行的CPU时间。程序开始执行时调用start = clock()记录开始时间,执行结束时调用end = clock()记录结束时间。可以通过计算时间差并除以CLOCKS_PER_SEC来计算程序的执行时间。
三、用户时间
用户时间是指程序执行时在用户态运行的时间。在Linux C编程中,可以使用getrusage()函数获取进程的系统资源使用情况,其中包括用户时间和系统时间。以下是一个简单的示例:
“`
#include
#include
int mn() {
struct rusage usage;
getrusage(RUSAGE_SELF, &usage);
printf(“用户时间为:%ld 秒 %ld 微秒\n”, usage.ru_utime.tv_sec, usage.ru_utime.tv_usec);
return 0;
}
“`
在上面的示例中,使用getrusage()函数可以获取进程的资源使用情况,其中ru_utime成员包含了进程在用户态执行的时间。可以将其打印出来,以获取用户时间。
相关问题拓展阅读:
1.时间表示
在程序当中,我慧含们经常要输出系统当前的时间,比如我们使用date命令的输出结果.这个时候我们可以使用下虚笑面两个函数:
#include
time_t time(time_t *tloc);
char *ctime(const time_t *clock);
time函数返回从1970年1月1日0点以来的秒数.存储在time_t结构之中.不过这个函数差碧含的返回值对于我们来说没有什么实际意义.这个时候我们使用第二个函数将秒数转化为字符串. 这个函数的返回类型是固定的:一个可能值为.Thu Dec7 14:58:这个字符串的长度是固定的为26.
2.时间的测量
有时候我们要计算程序执行的时间.比如我们要对算法进行时间分析.这个时候可以使用下面这个函数. #include int gettimeofday(struct timeval *tv,struct timezone *tz); strut timeval { long tv_sec; /* 秒数 */ long tv_usec; /* 微秒数 */ }; gettimeofday将时间保存在结构tv之中.tz一般我们使用NULL来代替. #include #include #include void function() { unsigned int i,j; double y; for(i=0;i
这个程序输出函数的执行时间,我们可以使用这个来进行系统性能的测试,或者是函数算法的效率分析.在我机器上的一个输出结果是: Used Time:0.556070
快照功能:记录当前的硬盘的状态。刚建快照时快照占用内存为0,标记了当前硬盘的存储状态。当虚拟机对快照标记的内容改写时,会将改写的内容存储进快照,与未改写的部分整合得到完整的快照。当快照标记的部分被完全改写,那么快照存储空间完整记录了当时拍摄时的内存状态。
参数形式
之一种:参数用一横的说明后面的参数是字符形式。
第二种:参数用两横的说明后面的参数是单词形式。
第三种:参数前有横的老链顷是 System V风格。
第四种:参数前没有横的是 BSD风格。
cat、more、less、head、tail命令的比较:
cat命令可以一次显示整个文件,如果文件比较大,使用不是很方便;
more命令可以让屏幕在显示满一屏幕时暂停,按空格往前翻页,按b往后翻页。
less命令也可以分页显示文件,和more命令的区别就在于: 支持上下键卷动屏幕、查找;不需要在一开始就读取整个文件,打开大文件时比more、vim更快。
head命令用于查看文件的前n行。
tail命令用于查看文件的后n行,加上-f命令,查看在线日志非常方便,可以打印最新增加的日志。
一般模式:
编辑模式:
命令模式:
编码
多行操作(列编辑模式)
插入:ctrl+v进入列编辑模式,上下移动光标选择需要插入的位置,然后输入大写I,输入需要文本,最后按esc键退出,就会发现文本会在选择的多行中插入。
删除:ctrl+v进入列编辑模式,上下移动光标选中需要删除的部分,然后按d,就会删除选中的内容。
①head:显示文件头部内容
②tail:输出文件尾部内容
注意:用vim和vi修改内容会删除源文件并生成新文件,所以tail -f会失效。需要用到
追加和覆盖语句(>或>>),才能被tail -f监视到。
一般用于查看小文件
查看压缩文件中的文本内容
例:
①more:文件内容分屏查看器
②less:分屏显示文件内容,效率比more高
1、简单读取
运行脚本如下
测试结果为:
2、-p 参数,允许在 read 命令行中直接指定一个提示。
运行脚本如下
测试结果为:
echo (输出内容到控制台)
输出给定文本的sha256加密后的内容
①显示当前时间信息
②显示当前时间年月日
③显示当侍陆前时间年月日时分秒
④显示昨天
⑤显示明天时间
⑥显示上个月时间
需要注意的是取下个月的命令存在bug,执行如下命令会得到21-10,但是正常应该得到21-09,需要注意
date -d “+1 month” +%y-%m
⑦修改系统时间
⑧获取当前时间戳
获取秒时间戳: date +%s
获唤袜取毫秒时间戳:$
查看日历
(1)查看当前月的日历
(2)查看2023年的日历
例:
对比gzip/gunzip,zip/unzip可以压缩文件和目录且保留源文件。
①zip:压缩
②unzip:解压缩
只能压缩文件不能压缩目录,不保留原来的文件。
gzip 文件 (只能将文件压缩为*.gz文件)
gunzip 文件.gz (解压缩文件命令)
例: crontab -e
(1)进入crontab编辑界面。会打开vim编辑你的工作。
(2)每隔1分钟,向/root/bailongma.txt文件中添加一个11的数字
*/1 * * * * /bin/echo ”11” >> /root/bailongma.txt
(3)可以用tail -f 目标文件来实施监控追加的内容
查看日志
可以用tail -f /var/log/cron.log观察
Cron表达式见文章:
ls
cd
例:
cd -P $(dirname $p1) ; pwd 先跳转到文件的所在目录,再打印$p1文件的实际路径
概述
①cp(copy):只能在本机中复制
②scp(secure copy):可以复制文件给远程主机
scp -r test.sh hxr@hadoop102:/root
③rsync(remote sync):功能与scp相同,但是不会改文件属性
rsync -av test.sh test.sh hxr@hadoop102:/root
④nc(netcat):监听端口,可以实现机器之间传输文件。
nc -lk 7777 (-l表示listen,-k表示keep)
强制覆盖不提示的方法:\cp
例:scp -r test.sh hxr@bigdata1:/root
例:rsync -av test.sh hxr@bigdata1:/root
例:
nc -lp> nc_test.txt
nc -w 1 hadoop102 shutdown > reboot > halt
(1)sync(功能描述:将数据由内存同步到硬盘中)
(2)halt(功能描述:关闭系统,等同于shutdown -h now 和 poweroff)
(3)reboot(功能描述:就是重启,等同于 shutdown -r now)
(4)shutdown
安装
yum install -y telnet-server telnet
ls -i 显示文件的节点号
find -inum 节点号 -delete 删除指定的节点即可删除对应的文件
启动一个服务: systemctl start postfix.service
关闭一个服务: systemctl stop postfix.service
重启一个服务: systemctl restart postfix.service
显示一个服务的状态: systemctl status postfix.service
在开机时启用一个服务: systemctl enable postfix.service
在开机时禁用一个服务: systemctl disable postfix.service
注:在enable的时候会打印出来该启动文件的位置
列出所有已经安装的服务及状态:
systemctl list-units
systemctl list-unit-files
查看服务列表状态:
systemctl list-units –type=service
查看服务是否开机启动: systemctl is-enabled postfix.service
查看已启动的服务列表: systemctl list-unit-files | grep enabled
查看启动失败的服务列表: systemctl –failed
查看服务日志: journalctl -u postfix -n 10 -f
命令类似systemctl,用于操作native service。
添加脚本为服务(需要指定启动级别和优先级): chkconfig –add
删除服务: chkconfig –del
单独查看某一服务是否开机启动的命令 : chkconfig –list
单独开启某一服务的命令 : chkconfig on
单独关闭某一服务的命令: chkconfig off
查看某一服务的状态: /etc/intd.d/ status
启用服务就是在当前”runlevel”的配置文件目录 /etc/systemd/system/multi-user.target.wants 里,建立 /usr/lib/systemd/system 里面对应服务配置文件的软链接;禁用服务就是删除此软链接,添加服务就是添加软连接。
su 用户名称 (切换用户,只能获得用户的执行权限,不能获得环境变量)
su – 用户名称(切换到用户并获得该用户的环境变量及执行权限)
echo $PATH 打印环境变量
设置普通用户具有root权限
修改 /etc/sudoers 文件,找到下面一行(91行),在root下面添加一行,如下 所示:
或者配置成采用sudo命令时,不需要输入密码
修改完毕,现在可以用hxr 帐号登录,然后用命令 sudo ,即可获得root权限进行操作。
以azkaban用户执行引号中的命令
gpasswd -d 将用户从组中删除
gpasswd -a 将用户加入到组中
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对 /etc/group文件的更新。
0首位表示类型 – 代表文件 d 代表目录 l 链接文档(link file)
三种特殊权限suid、sgid、sticky
例子:
变更文件权限方式一
例:chmod u-x,o+x houge.txt
变更文件权限方式二
例:chmod -R/mnt/ 修改整个文件夹的文件权限
在linux中创建文件或者目录会有一个默认权限的,这个默认权限是由umask决定的(默认为0022)。umask设置的是权限的“补码”,而我们常用chmod设置的是文件权限码。一般在/etc/profile 、~/.bashprofile 或者 ~/.profile中设置umask值。
umask计算
如root用户的默认umask为0022(之一个0 代表特殊权限位,这里先不考虑),创建的文件默认权限是644(即默认666掩上umask的022),创建的目录是755(即默认777掩上umask的022)。
对于root用户的umask=022这个来说,777权限二进制码就是(111)(111)(111),022权限二进制码为(000)(010)(010)。
上面就是一个umask的正常计算过程,但是这样实在是太麻烦了。我们使用如下的简单的方法快速计算。
上面的这个方法计算是非常方便的, 为何得到奇数要+1呢?
文件的更大权限是666,都是偶数,你得到奇数,说明你的umask有奇数啊,读为4,写为2,都是偶数,说明你有执行权限的。
就按照上面的umask=023为例,在计算其他用户权限的时候6-3=3 ,6是读写,3是写和执行,其实应该是读写权限减去读权限的得到写权限的,相当于我们多减去了一个执行权限。所以结果加1。
umask修改
如果想单独修改某个文件夹的新建文件的权限,可以使用setfacl命令。
例:递归改变文件所有者和所有组 chown -R hxr:hxr /mnt
char exp = “”弊李坦;
sprintf(exp, “date -s \”扰蠢%s %s\””, date, time);
system(exp);
linux c 获取时间的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux c 获取时间,Linux C编程中如何获取时间?,在Linux下, 用C如何设置日期,Linux命令,c语言 设置linux系统时间的信息别忘了在本站进行查找喔。
成都服务器托管选创新互联,先上架开通再付费。
创新互联(www.cdcxhl.com)专业-网站建设,软件开发老牌服务商!微信小程序开发,APP开发,网站制作,网站营销推广服务众多企业。电话:028-86922220
名称栏目:Linux C编程中如何获取时间? (linux c 获取时间)
标题链接:http://www.mswzjz.cn/qtweb/news46/445946.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能