gpt4 book ai didi

c - 在 C 中创建新进程时变量的值不会改变

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

我正在用 c 语言为学校编写作业,我们正在为此使用流程。我的目标是将一些随机值分配给一个结构,当我尝试通过 execve 将一些随机数分配给一个特定进程时,每个其他进程在应该更改它时都保持相同的值。

所以这是我编写的用于创建进程并在其上运行 execve 的代码

    for (int i = 0; i < init_people; ++i) {
switch (pids[i] = fork()) {

case -1:
fprintf(stderr,"Error #%03d: %s\n", errno, strerror(errno));
exit(1);
break;

case 0:
switch (i % 2) {
case 0:
execve("./A",args,NULL);
break;
case 1:
execve("./B",args,NULL);
break;
default:
break;
}
exit(0);
break;
default:
waitpid(pids[i], &returnStatus, 0);
break;
} }

A.c和B.c的execve就这么简单

int main(int argc, char *argv[]) {

int r;
srand(time(NULL));
r = rand() & 11;
printf("%d\n", r);

return 0;

每次我运行这段代码时,它总是给我一个随机值,该值在所有执行过程中都保持不变,而每次我为每个进程运行 execve 文件时它都应该改变。我怎样才能解决这个问题?我被迫使用 execve 并且无法更改它。

最佳答案

time() 返回整秒。很可能所有 fork+execve 组合都将在一秒钟内完成,这意味着 time(NULL) 的值在每个已执行的子进程中都将相同。如果您希望子进程的伪随机生成器以不同方式初始化,您可以使用 getpid() 而不是 time(NULL)

关于c - 在 C 中创建新进程时变量的值不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47613445/

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