gpt4 book ai didi

c - 我如何在 fork(), linux 中演示 COPY ON WRITE

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:13 24 4
gpt4 key购买 nike

<分区>

根据 COW 机制,父区域中的页面在写入之前不会被复制到子区域。所以我做了这段代码请看这段代码

#include <stdio.h>
#include <stdlib.h> // for system()
#include <unistd.h> // for execl(), fork()
#include <wait.h> // for wait()
int main(int argc, char *argv[]) {
int pid, i; /* fork another process */
char *ptr = "ptr";
char *b = ptr;
printf("%s , %p, %p\n " , b, b, &b);
pid = fork();

if(pid < 0) { /* error occurred */
fprintf(stderr,"Fork Failed");
exit(-1);
}
else if (pid== 0) { /* child process */
printf("it should be same with parent : %s , %p, %p\n " , b, b, &b);
b = "hello";
printf("it might be differ : %s , %p, %p\n " , b, b, &b);
}
else {
wait(NULL);
printf("parent : %s , %p, %p\n " , b, b, &b);
exit(0);
}
}

当我写一些东西(b =“hello”)时,我认为子进程的堆栈使用与父进程不同的地址空间,但是“b”的地址与父进程和子进程的地址相同。他们为什么一样?

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