新しいユーザーなので、この説明が十分に明確でない場合は申し訳ありません...複数のソースファイル間で変更/使用される timespec 変数の作成に問題があります。私のプログラムは、最初のプログラム内から別のプログラムを実行するのにかかる時間を決定することを目的としているため、2 つのソース ファイルで時間を計測し、後で時間差を決定するために使用できるように保存する必要があります。私はインターネットを精査してさまざまなことを試しましたが、ソースファイルが変数のさまざまなインスタンスを作成しているように常に見えます
私のコードは基本的に次のようになります。
ヘッダー ファイル:
//shared.h
#ifndef shared_h
#define shared_h
#include<time.h>
extern struct timespec callTime, startTime;
#endif
ソース ファイル 1:
//shared.c
#include "shared.h"
struct timespec startTime = {0}, callTime = {0};
ソース ファイル 2:
//app.c
#include "shared.h"
#include <time.h>
void main(){
clock_gettime(CLOCK_MONOTONIC, &startTime);
}//end of main
ソースファイル:
//timer.c
#include "shared.h"
#include <time.h>
void main(){
pid_t pid = fork();
clock_gettime(CLOCK MONOTONIC, &callTime);
if(pid == 0){
execvp("./app", NULL);
return 0;
}//end of if
printf("Call: %ld & Start: %ld\n", callTime.tv_sec, startTime.tv_sec);
return 0;
}//end of main
私は次のようなものを取得します...
コール: 14928304940 & 開始: 0
願わくば、このコードが私がやろうとしていることを理解してくれることを願っています。他のプログラムをフォークして実行すると、 startTime の値は変更されますが、親プロセスで後で呼び出すときに保持されません。値は、計時時間ではなく、初期値になります。この問題に関するご意見をお待ちしております。
追加の注記: shared.c を timer.c および app.c と個別にリンクしてから、timer.c を実行します。
gcc shared.h
gcc -c shared.c
gcc -c app.c
gcc -c timer.c
gcc -o app app.o shared.o
gcc timer.o shared.o
./a.out