我在head.h中定义了一个静态整数,如下所示。
// head.h
#include <stdio.h>
#include <stdlib.h>
static int a = 100;
我在两个终端中同时执行one.c和two.c两个程序,首先是一个.c因为我给了getchar()它等待从stdin获取输入。
// one.c
#include "head.h"
extern int a;
int main(void)
{
getchar();
printf("Value of a : %d\n", a);
return 0;
}
当one.c正在等待我执行two.c,它将a的值更改为80,我已声明&#39; a&#39;作为head.c中的静态,因此它只有一个内存来存储没有创建副本的值。按下ENTER,two.c打印a的值为80.但是现在当按下一个c进入时,它仍然打印100。
// two.c
#include "head.h"
extern int a;
int main(void)
{
a = 80;
getchar();
printf("Value of a : %d\n", a);
return 0;
}
为什么这不起作用,如果有其他方法可以更改外部变量,请告诉我。
答案 0 :(得分:1)
两个不同的进程无法看到彼此的地址空间,因为i386是专门为保护进程地址空间而设计的。
如果你需要两个不同的进程和共享内存,那么你需要线程,它不是一个进程,但它有类似的行为。
哦,当然你仍然可以像这样使用标准输入输出:
在第一个过程中:printf("%d\n", send);
在第二阶段:scanf("%d", &recv);
但要使其正常工作,您必须按如下方式运行程序:
./ proc1 | ./proc2
但不 ./proc2| ./proc1
而非./proc1 && ./proc2
而不是在不同的终端。
你也可以使用管道,如果你需要,请在评论中问我,我会描述