/* lap.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main(int argc, char *argv[])
{
int i;
char com[257];
clock_t start_time, end_time;
unsigned long int rests = 0, base = 0;
if(argc < 2)
{
fprintf(stderr, "Usage : lap command [arg..]\n");
return EXIT_FAILURE;
}
com[0] = 0;
for(i = 1; i < argc; i++) /* command を 文字列 com に取込み */
{
strcat(com, argv[i]);
strcat(com, " ");
}
start_time = clock();
while(start_time == clock()) /* 1秒の区切りをつける */
;
start_time += CLOCKS_PER_SEC;
while(start_time == clock()) /* 1秒間 base をカウントアップ */
base++;
system(com); /* command をチャイルドプロセスで実行 */
/* コマンド開始時刻は
start_time + CLOCKS_PER_SEC である */
end_time = clock(); /* 終了時刻を end_time に記録 */
while(end_time == clock()) /* 1秒未満の端数を rests にカウント */
rests++;
/*
コマンド開始時刻 : start_time + CLOCKS_PER_SEC
コマンド終了時刻 : end_time + CLOCKS_PER_SEC − rests / base
*/
fprintf(stderr, "\ncommand : %s\n", com);
fprintf(stderr, "time : %10.3f [sec]\n",
(end_time - start_time) / CLOCKS_PER_SEC - rests / (double)base);
return EXIT_SUCCESS;
}
|