1.利用fork创建子进程,验证局部变量、全局变量和malloc动态申请的变量在父子进程中的使用情况。
时间: 2023-05-19 17:06:00 浏览: 251
举例讲解C语言的fork()函数创建子进程的用法
当使用fork创建子进程时,子进程会复制父进程的内存空间,包括局部变量和全局变量。因此,在子进程中对这些变量的修改不会影响父进程中的值。而对于malloc动态申请的变量,由于它们存储在堆中,因此在子进程中也会复制一份,但是它们的地址会发生改变,因此需要在子进程中重新分配内存。
以下是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int global_var = 10;
int main() {
int local_var = 20;
int *heap_var = (int *) malloc(sizeof(int));
*heap_var = 30;
pid_t pid = fork();
if (pid == 0) { // 子进程
printf("Child process:\n");
printf("global_var = %d\n", global_var);
printf("local_var = %d\n", local_var);
printf("*heap_var = %d\n", *heap_var);
global_var = 100;
local_var = 200;
*heap_var = 300;
printf("After modification:\n");
printf("global_var = %d\n", global_var);
printf("local_var = %d\n", local_var);
printf("*heap_var = %d\n", *heap_var);
} else if (pid > 0) { // 父进程
printf("Parent process:\n");
printf("global_var = %d\n", global_var);
printf("local_var = %d\n", local_var);
printf("*heap_var = %d\n", *heap_var);
} else { // fork失败
printf("fork failed!\n");
return -1;
}
free(heap_var);
return 0;
}
```
输出结果为:
```
Parent process:
global_var = 10
local_var = 20
*heap_var = 30
Child process:
global_var = 10
local_var = 20
*heap_var = 30
After modification:
global_var = 100
local_var = 200
*heap_var = 300
```
可以看到,在子进程中对变量的修改不会影响父进程中的值。
阅读全文