[英]struct timespec used in multiple source files: C
新用户,如果对这种解释不够清楚感到抱歉...我在创建要在多个源文件之间修改/使用的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
我会得到类似...
致电:14928304940&开始:0
希望这段代码可以理解我想要做的事情。 当它派生并执行另一个程序时,startTime的值将更改,但不会保留,以便稍后在Parent进程中调用它时。 该值将只是它的初始值,而不是时钟时间。 似乎对此事有任何想法将不胜感激!
补充说明:我确实将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
的误解。 它给子进程父进程内存的副本 。 不一样的内存。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
您的子进程(假设app.c
在此处编译为app
)将修改其自己的startTime副本,然后退出app.c
修改父进程的startTime变量。
如果要让子进程将某些信息传达回父进程,则需要使用某种形式的进程间通信。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.