0
同じプログラムでは、関数の実行時間は計算できますが、別のプログラムでは他のプログラム(cプログラム)の実行時間を計算する方法があります。私はexecve()とclock()とsystem()を使ってみましたが、プログラムの実行時間は になりませんでした。cとlinuxのプログラム実行時間を計算する
例:あなたは、元のコードに取得することはできませんので、コールexec
あなたのコードを有する後にクリアされているのであなたは、時計にあなたがした方法を使用することはできません
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<signal.h>
#include<time.h>
main(int argc, char *argv[])
{
pid_t child;
pid_t tpid;
int status;
char *envp[] = {NULL};
char *newargv[] = {argv[1],argv[2],argv[3],NULL};
clock_t start, end;
double time_taken;
child = fork();
if(child == 0)
{
printf("in child\n");
start = clock();
execve(argv[1], newargv,envp);
end = clock();
time_taken = ((double)(end - start))/CLOCKS_PER_SEC;
printf("fun() took %f seconds to execute \n", time_taken);
exit(1);
}
if(child != 0)
{
/* This is run by the parent. Wait for the child
to terminate. */
// end = clock();
// time_taken = ((double)(end - start))/CLOCKS_PER_SEC;
// printf("fun() took %f seconds to execute \n", time_taken);
printf(" in parent\n");
do {
pid_t tpid;
tpid = wait(&status);
// if(tpid != child) process_terminated(tpid);
}while(tpid != child);
//return status;
}
}
あなたは思考に問題があります。「exec」ファミリの関数ファミリは、エラーがある場合のみ返します。エラーがなければ、決して戻りません。 –
'fork'を呼び出す前に*の開始時刻を記録する必要があります。そして、終了時刻は親の「待ち」の後です。 – user3386109