我想找到另一个程序运行所花费的时间; 我正在使用以下代码;
system("time ./a.out > garb");
它给出了非常奇怪的输出。
#include <stdio.h>
int main()
{
long int i;
for ( i = 0; i < 10000000; i++ ) {
printf("Hello World!\n");
}
printf("C Program\n");
return 0;
}
输出
0.31user 0.10system 0:00.41elapsed 99%CPU (0avgtext+0avgdata 1744maxresident)k
0inputs+253912outputs (0major+149minor)pagefaults 0swaps
答案 0 :(得分:2)
一种方法是使用wait3
或wait4
函数(如果系统中有这些函数)。
pid_t wait3(int *status, int options, struct rusage *rusage);
pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage);
退出孩子后,您的程序将获得子进程的资源使用。
struct rusage
的所有字段都不会更新,但前两个字段会说明您的需求:
struct rusage {
struct timeval ru_utime; /* user CPU time used */
struct timeval ru_stime; /* system CPU time used */
...
ru_utime
和ru_stime
的总和是子进程使用的总CPU时间。
使用wait3 / wait4
并不像调用system()
函数那么简单。
编辑:
您应该通过将time
的打印输出的两个值相加来获得相同的结果:
0.31user 0.10system
答案 1 :(得分:0)
我认为我们可以在系统中找到另一种方式而不是time
。
类似的东西:
#include <stdio.h>
#include <time.h>
int main()
{
clock_t start = clock();
system('./a.out');
printf("Time elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);
return (0);
}
答案 2 :(得分:0)
英特尔处理器插入了64位寄存器,用于计算进程的时钟。
答案 3 :(得分:0)