2014-12-14 14:54:22 u011192270 阅读数 3036

  时间显示:

  本文将着重阐述在linux下C开发中实际应用的时间编程的一些方法和技巧,对一些原理性的东西并不进行深入的讨论,如果读者有更深刻的理解,欢迎加入讨论。

  在实际C开发中,我们常常需要输出或者让程序显示当前系统时间,例如生成日记文件、游戏开发等等。回想一下,在命令行中我们使用date来实现这一功能,然而在程序中如何实现呢?相信有一些C基础的读者第一时间会想到time()函数。下面就让我来介绍一些比较常用的时间函数:

定义 精度
time()
gettimeofday() 微秒
clock_gettime() 纳秒
  这里还有一个老系统中经常使用的ftime()函数,精度为毫秒,由于在实际使用中已经被time()取代,所以在此不再列出。

  这些函数都返回从 1970 年 1 月 1 日 0 点以来,到现在的时间,存储在相应的数据结构中。注:这里的时间都表示格林威治时间,也叫GMT或UTC时间。

 例一:time()的使用

#include<stdio.h>
#include<time.h>//调用时间函数
int main()
{
	time_t time_now;
	time(&time_now);//获取当前时间,存入time_now的地址中
	printf("time:%ld\n",time_now);//注意数据类型应使用long int
	return 0;
}
运行结果:

  gettimofday()和clock_gettime()函数由于不常使用,在此只给大家推荐一些举例。详见点击查看详细介绍


 格式转换:

 上例中的到的结果往往不是我们想要的,我们需要的是如2014年12月14日之类的有效时间显示,这就需要我们对得到的秒数进行格式转换。格式转换常常有两种方法。

 1.固定格式转换:

  固定格式转换使用ctime()函数就可以实现(char *ctime(const time_t *clock); ),这个函数的返回类型是固定的:一个可能值为Thu Dec 7 14:58:59 2000,这个字符串的长度是固定的,为26。实际开发中使用固定转换就够用了,而且很方便。

 例二:固定转换

#include<stdio.h>
#include<time.h>
int main()
{
    time_t time_now;
	time(&time_now);//将地址传给time函数,获取当前时间
	printf("time is %ld\n",time_now);
	printf("current local time:%s",ctime(&time_now));//用ctime将时间转换为字符串输出
	return 0;
}
运行结果:



2.自定义格式转换:

用户可以根据自己的需要来设置转换的格式,实际应用中主要有两个函数:

struct tm *gmtime(const time_t *timep);//格林威治时间
struct tm *localtime(const time_t *timep);//当地时间
这两个函数将time_t格式转换为tm数据格式,数据结构tm如下:

struct tm
{
    int    tm_sec;        /* Seconds: 0-59 (K&R says 0-61?) */
    int    tm_min;        /* Minutes: 0-59 */
    int    tm_hour;    /* Hours since midnight: 0-23 */
    int    tm_mday;    /* Day of the month: 1-31 */
    int    tm_mon;        /* Months *since* january: 0-11 */
    int    tm_year;    /* Years since 1900 */
    int    tm_wday;    /* Days since Sunday (0-6) */
    int    tm_yday;    /* Days since Jan. 1: 0-365 */
    int    tm_isdst;    /* +1 Daylight Savings Time, 0 No DST,* -1 don't know */
};
转换完成后还需要调用asctime()和strftime()进行字符串输出。

asctime()与ctime()类似,格式固定,参见例二。

strftime()可与printf()函数类比,可以通过输入参数自定义时间的输出格式:

size_t strftime(char *outstr, size_t maxsize, const char *format,const struct tm *timeptr);

例三:自定义格式转换

#include<stdio.h>
#include<time.h>
int main()
{
	time_t time_now;
	struct tm * time_struct;
	char buf[100];
	time(&time_now);
	time_struct=localtime(&time_now);
	strftime(buf,100,"time is now:%I:%M%p.",time_struct);
	puts(buf);
	return 0;
}
运行结果:


  这部分内容到这里就差不多了。这是我的第一篇blog,写的不好请多多包涵。本人还是以为在校学生,并没有过多的实际开发经验,有些地方的理解也许有偏差,也希望大家多多指正,帮助我更地理解。


















 


Linux
2019-02-27 13:26:08 weixin_43632249 阅读数 49

Linux操作系统基本操作

  • 文件和目录的操作
    • ls 显示文件和目录列表
    • cd 切换目录
    • pwd 显示当前工作目录
    • mkdir 创建目录
    • rmdir 删除空目录
    • touch 生成一个空文件或更改文件的时间
    • cp 复制文件和目录
    • mv 移动文件和目录、文件或目录改名
    • rm 删除文件或目录
    • ln 建立链接文件
    • find 查找文件
    • file/stat 查看文件类型或文件属性信息
    • echo 把内容重定向到指定的文件中,有则打开,无则创建
    • 管道命令| 将前面的结果给后面的命令 例如:‘ls-la | wc’,将ls的结果加给wc命令来统计字数
    • 重定向 >是覆盖模式 >>是追加模式 例如:’echo “Python3.6 life is short” > Lee.txt’把左边的输出放到右边的文件里去
  • 查看文件
    • cat 查看文本文件内容
    • more 可以分页看
    • less 不仅可以分页,还可以方便地搜索,回翻等操作
    • tail -10 查看文件的尾部的10行
    • head -20 查看文件的头部的20行
  • 打包和压缩文件
    • 压缩 gzip filename
      bzip2 filename
      tar -czvf filename
    • 解压 gzip -d filename.gz
      bzip2 -d filename.bz2
      tar -xzvf filename.tar.gz
  • grep + 正则表达式
    • grep -n mystr myfile 在文件myfile中查找包含字符串mystr的行
    • grep ‘1’ myfile 显示myfile中第一个字符为字母的所有行
  • Vi编辑器
    • 普通模式 G 用于直接跳转到文件尾
      ZZ 用于存盘退出Vi
      ZQ 用于不存盘退出Vi
      / 和 ? 用于查找字符串
      n 继续查找下一个
      yy 复制一行
      p 粘贴在下一行, P(大写)粘贴在前一行
      dd 删除一行文本
      u 取消上一次编辑操作(undo)
    • 插入模式 使用 i 或 a 或 o 进去插入模式
      使用esc返回普通模式
    • 命令行模式 w 保存当前编辑文件,但并不退出
      w newfile 存为另一个名为 “newfile” 的文件
      wq 用于存盘退出Vi
      q! 用于不存盘退出Vi
      q 用于直接退出Vi(未作修改)
    • 设置Vi环境 set autoindent 缩进,常用于程序的编写
      set noautoindent 取消缩进
      set number 在编辑文件时显示行号
      set tabstop=value 设置显示制表符的空格字符个数
      set 显示设置的所有选项
  • 权限管理
    • chomd 改变文件或目录的权限
    • chown 改变文件或目录的属主(所有者)
    • chgrp 改变文件或目录所属的组
    • umask 设置文件的缺省生成掩码
    • 文件扩展属性
      lasttr [-adR][文件|目录] 显示扩展属性
      chattr [-R][[-+=][属性]]<文件|目录> 修改扩展属性
  • 管理用户
    • 用户管理 useradd 添加用户
      usermod 修改用户
      userdel 删除用户
    • 组管理 groupadd 添加组
      groupmod 修改组
      groupdel 删除组
    • 批量管理用户 newusers 成批添加/更新一组账户
      chpasswd 成批更新用户的口令
    • 组成员管理
      • 向标准组中添加用户
        gpasswd -a <用户账号名> <组账号名>
        usermod -G <组账号名> <用户账号名>
      • 从标准组中删除用户
        gpasswd -d <用户账号名> <组账号名>
    • 口令管理
      • 口令时效设置: 修改/etc/login.defs的相关配置参数
      • passwd 口令维护(禁用、恢复和删除用户口令)
      • change 设置已存在用户的口令时效
    • 切换用户
      • su
      • sudo
    • 用户相关的命令
      • id 显示用户当前的uid、gid和用户所属的组列表
      • groups 显示指定用户所属的组列表
      • whoami 显示当前用户名称
      • w/who 显示登录用户及相关信息
      • newgrp 用于转换用户的当前组到指定的组账号,用户必须属于该组才可以正确执行该命令
  • 进程管理
    • ps 查找出进程的信息
    • nice和renice 调整进程的优先级
    • kill 杀死进程
    • free 查看内存使用状况
    • top 查看实时刷新的系统进程信息
    • 作业原理
      • jobs 列举作业号码和名称
      • bg 在后台恢复运行
      • fg 在前台恢复运行
      • ctrl+z 暂时停止某个进程
    • 自动化任务
      • at
      • cron
    • 管理守护进程
      • chkconfig
      • service
      • ntsysv
  • 网络管理
    • 网络接口相关
      • ifconfig 查看网络接口信息
      • ifup/ifdown 开启或关闭接口
    • 临时配置相关
      • route命令 可以临时地设置内核路由表
      • hostname命令 可以临时地修改主机名
      • systl命令 可以临时地开启内核的包转发
      • ifconfig命令 可以临时地设置网络接口的IP参数
    • 网络检测的常用工具
      • ifconfig 检测网络接口配置
      • route 检测路由配置
      • ping 检测网络连通性
      • netstat 查看网络状态
      • losf 查看指定IP和/或端口的进程的当前运行情况
      • host/dig/nslookup 检测DNS解析
      • traceroute 检测到目的主机所经过的路由器
      • tcpdump 显示本机网络流量的状态
    • 安装软件
      • yum
      • rpm
      • wget

  1. a-zA-Z ↩︎

2019-06-12 09:41:24 nrsc272420199 阅读数 249

1.在某个文件夹中快速找到文件名包含MM082的文件

ls *MM082* -altr
  • a 显示隐藏文件
  • l 显示更多文件信息
  • t 按生成时间排序
  • r 把t生成的时间从小到大排序,不加r就是时间由大到小排序即时间最新的在最前面

2.快速定位某个时间段的所有文件/某个文件并显示其详细信息

2.1查询某个时间段内的所有文件
find . -type f -newermt '2018-06-11 00:00:00' ! -newermt '2019-06-11 23:59:59'
2.2查询某个时间段内的所有文件并显示其详细信息,按照修改时间的倒序进行排序
find . -type f -newermt '00:00:00' ! -newermt '00:59:59'|xargs ls –alt
2.3查询某个时间段内文件名包含 MM158的所有文件,显示其详细信息,并按照修改时间的倒序进行排序
find . -type f -name *MM158* -newermt '00:00:00' ! -newermt '00:59:59'|xargs ls –alt
2.4查询某个时间点后的所有文件,显示详细信息,按时间倒序
find . -type f -newermt '17:00:00' | xargs ls -alt
2.5查询某个时间点前的所有文件,显示详细信息,按时间倒序,显示到纳秒级
find . -type f ! -newermt '00:00:30' | xargs ls -alt --full-time

3.在日志信息里根据关键字快速定位其前后文信息

3.1显示getOriginalSignature所在行及其之后20行
grep -A 20 "getOriginalSignature" AAA_20190614.log --color 
3.2显示getOriginalSignature所在行及其之前20行
grep -B 20 "getOriginalSignature" AAA_20190614.log --color
3.3显示getOriginalSignature所在行及其之前20行和之后20行
grep -C 20 "getOriginalSignature" AAA_20190614.log --color
3.4显示getOriginalSignature所在行及其之前10行和之后20行
grep  -B 10  -A 20"getOriginalSignature" AAA_20190614.log --color
3.5只知道文本内容为"getOriginalSignature",所在文件的文件名含有MD011,查询该具体文件的文件名,创建日期等—可以方便的用来查看有没有该文件
grep -l "getOriginalSignature" *MD011* | xargs ls -alt --full-time
2019-06-22 22:48:27 Mikowoo007 阅读数 41

文件目录操作命令

命令 功能 命令 功能
ls 显示文件和目录列表 pwd 显示当前工作目录
touch 生成一个空文件或更改文件的时间 cd 切换目录
cp 复制文件或目录 find 在文件系统中查找制定的文件
mv 移动文件或目录、文件或目录更名 mkdir 创建目录
rm 删除文件或目录 rmdir 删除空目录
ln 建立链接文件 tree 显示目录树

ls

命令 说明
ls 列表显示当前目录下的文件和目录
ls -a 列表显示当前目录下的文件和目录(包括隐含文件和目录)
ls -l 以长格式列表显示结果
ls -R 递归显示当前目录及其子目录下的文件和目录
ls -dl /usr/share/ 仅显示/usr/share/目录本身,而非/usr/share/目录中的内容

pwd

显示当前所在的工作目录

mkdir

命令 说明
mkdir /home/XXX/Documents/test 以绝对路径创建一个空目录
mkdir -p mydoc/FAQ 以相对路径创建一个空目录树
mkdir -p src/{abc,bcd}/html 相对路径创建/src/abc/html 和 /src/bcd/html 目录

touch

命令 说明
touch abc bcd 创建两个0字节文件
touch oldfile 修改已存在文件的时间为当前时间
touch -r oldfile newfile 参考oldfile文件的时间属性设置newfile文件的时间

cd

命令 说明
cd 切换到私有目录
cd - 切换到上次使用cd命令的目录
cd … 返回当前目录的上一级目录
cd …/… 返回当前目录的上两级目录

tree

命令 说明
tree 显示当前目录下的目录结构
tree -L 3 /usr/ 显示 /usr 目录下的三级目录树

cp

目录 说明
cp /bin/?sh . 使用"?" 通配符表示3个字符中sh的文件到当前目录(.)
cp http.conf{,.orig} 将当前目录下的http.conf 复制为 http.conf.orig
cp /bin/cpio mydoc 复制/bin下的cpio文件到 mydoc 目录下
cp abc bcd mydoc 将两个指定的文件复制到 mydoc 目录下
cp /usr/bin/[yz]* . 将y开头和z开头的文件复制到 当前目录下(.)
cp -r /etc/skel . 将/etc/skel 目录及其下面的所有内容复制到当前目录(.)

在这里插入图片描述

mv

命令 说明
mv FAQ bash_FAQ 将当前目录下的FAQ文件或目录改名为 bash_FAQ
mv [yz]* myusr/ 将当前目录下y开头和z开头的文件移动到 myusr 目录下

rm

命令 说明
rm myfile 删除指定文件,对文件夹无效
rm .* 删除当前目录下的所有隐含文件
rm -f file{1,3,5} 强制删除文件 file1,file3,file5
rm -r myusr/ 递归删除myusr 目录下所有内容(有删除提示)
rm -rf myusr/ 递归强制删除myusr 目录下所有内容 (无删除提示)

rmdir

删除空白目录abc

ln

命令 说明
ln cpio edit1 建立 cpio 的硬链接文件 edit1
ln -s cpio edit1 建立 cpio 的符号链接文件 edit1
ln -s mydoc/FAQ/ FAQ 对指定的目录 mydoc/FAQ/ 创建符号链接文件 FAQ

find

命令 说明
find . -name ‘my*’ 当前文件夹下以 my 开头的文件
find /home -user “ABC” 从 /home 目录开始查找用户属主为 ABC的文件
find . -type d -exec chmod 755 {} \ 将当前目录及其子目录下所有目录的权限改为 755
(755: 目录属主可读可写可进入,同组人和其他人员可读可进入)
find . -type f -exec chmod 644 {} \ 将当前目录及其子目录下所有文件的权限改为 644
(644: 文件属主可读可写可执行,同组人和其他人员可读可执行)

常用 Linux 操作

阅读数 31

没有更多推荐了,返回首页