gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:20 24 4
gpt4 key购买 nike

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

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

头文件:

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

希望这段代码能够理解我正在尝试做的事情。当它 fork 并执行另一个程序时,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

最佳答案

我认为你的问题是对 fork 的作用有误解。它为子进程提供父进程内存的副本。不是相同的内存....实际上在理智的架构上它是相同的内存w/o copy-on-write 语义,但现在不要担心。

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

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

关于c - 多个源文件中使用的结构 timespec : C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32461537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com