在多个源文件中使用的结构 timespec:C

struct timespec used in multiple source files: C

新用户,如果这个解释不够清楚,我很抱歉......我在创建多个源文件之间的 timespec 变量时遇到了 modified/used 问题。我的程序旨在确定从我的初始程序中执行另一个程序所需的时间,因此我需要在两个源文件中记录时间并将其存储以供稍后使用以确定时间差。我一直在网上搜索并尝试了不同的东西,但似乎我的源文件总是创建不同的变量实例

我的代码基本上是这样的:

头文件:

//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

我会得到类似...

Call: 14928304940 & Start: 0

希望这段代码能够理解我正在尝试做的事情。当它分叉并执行另一个程序时,startTime 的值会改变但不会保持不变,以便稍后在父进程中调用它时。该值将只是它的初始值而不是时钟时间。似乎对此事有任何想法将不胜感激!

添加注意:我分别使用 link 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

您尝试执行的操作无效。只有当多个源文件链接到同一个可执行文件时,共享变量才有效,即使这样也只适用于给定的 运行 进程。

您需要让子进程在启动时向父进程发送回消息,最好是通过管道,此时父进程知道子进程何时启动并可以调用 clock_gettime 秒时间.

我认为你的问题是对 fork 的作用有误解。它为子进程提供父进程内存的 copy。不是 相同的 内存....实际上在理智的体系结构上它是相同的内存 w/o 写时复制语义,但现在不要担心。

您的子进程(假设 app.c 在这里编译为 app)将修改它自己的 startTime 副本然后退出 w/o 修改父进程的 startTime 变量。

如果你想让子进程向父进程传达一些信息,你需要使用某种形式的进程间通信。