很多编程用的IDE在调试时,当程序结束时会有类似
[Finished in 0.012s]
字样来统计程序运行总时长,在有些情况我们需要用到这样一个小功能,在此我将用Fortran实现这样一个小程序。
将
runtime
后的命令行整体作为目标命令在框架内执行。
在执行目标命令前后获取系统时间(精确到毫秒)相减得到目标命令运行时长。
命令行处理
character(len=1024) :: cmd_line
character(len=64) :: args(16)
integer :: i, narg, time(0:1)
narg = iargc()
do i = 1, narg
call getarg(i,args(i))
end do
write(cmd_line,"(TR1,16A)") args(1:narg) ! 由输入参数拼接出目标指令
执行命令行前后获取系统时间
call system_clock(time(0))
call system(cmd_line)
call system_clock(time(1))
计算并输出时长信息
write(*,"('[Finished in ',(F0.3),'s]')") real(time(1)-time(0))/1000
program main
! Execute program and count it's running time.
! Usage: runtime [command]
! Author: ph
! Email: huipan.hnu@qq.com
! Date: 2017.08.14
implicit none
character(len=1024) :: cmd_line ! 规定了命令行最大长度
character(len=64) :: args(16) ! 规定了每个参数的最大长度
integer :: i, narg, time(0:1)
narg = iargc()
do i = 1, narg
call getarg(i,args(i))
end do
write(cmd_line,"(TR1,16A)") args(1:narg)
call system_clock(time(0))
call system(cmd_line)
call system_clock(time(1))
write(*,"('[Finished in ',(F0.3),'s]')") real(time(1)-time(0))/1000
end program main
gfortran runtime.f90 -o runtime
./runtime xxx
命令行处理
iargc()
获取参数个数。
call getarg(i, arg)
获取第i个参数。
字符串处理
write(str_variable, format) variables
将变量列表variables
按照指定格式format
输入到字符串变量str_variable
中。
write(unit, fmt)
的格式化输出。
获取系统日期和时间
call system_clock(count [, count_rate] [, count_max])
从系统时钟获取当前时间,count
为整型变量,存储当天时间到毫秒。如果要计算长时间运行的程序时间,则需要添加count_max
参数来增大统计上限或者改用data_and_time