当前位置: 技术问答>linux和unix
初学linux的编程,问几个关于进程的问题
来源: 互联网 发布时间:2015-08-09
本文导语: 一个简单的程序 int main() { int t=1; int x; while( (x=fork())==-1 ); //直到创建成功为止。 if( x==0 ) { t++; printf("t is %d",t); exit(0); } else { t++; printf("t is %d"...
一个简单的程序
int main()
{
int t=1;
int x;
while( (x=fork())==-1 ); //直到创建成功为止。
if( x==0 )
{
t++;
printf("t is %d",t);
exit(0);
}
else
{
t++;
printf("t is %d",t);
}
return 1;
}
请问怎么执行的结果都是
t is 2;
t is 2;
应该第二个t是3了啊?(因为前面t已经++了)。是因为创建了子进程,子进程把相关资源自己拷贝了一份吗?那我想让他们访问同一个变量怎么办?
还有是不是不能定义指针啊?我在变量定义那里加了 int *p; *p=t;结果编译能通过,但是一运行就提示段出错。
小弟初学,请指教。
int main()
{
int t=1;
int x;
while( (x=fork())==-1 ); //直到创建成功为止。
if( x==0 )
{
t++;
printf("t is %d",t);
exit(0);
}
else
{
t++;
printf("t is %d",t);
}
return 1;
}
请问怎么执行的结果都是
t is 2;
t is 2;
应该第二个t是3了啊?(因为前面t已经++了)。是因为创建了子进程,子进程把相关资源自己拷贝了一份吗?那我想让他们访问同一个变量怎么办?
还有是不是不能定义指针啊?我在变量定义那里加了 int *p; *p=t;结果编译能通过,但是一运行就提示段出错。
小弟初学,请指教。
|
1.各进程都拥有t的不同拷贝,2个进程各自加了1,原来是1,当然是2了
2.访问同一个变量,只能用共享内存了
3.你的*p首先要指向正确的内存地址啊
2.访问同一个变量,只能用共享内存了
3.你的*p首先要指向正确的内存地址啊
|
*p = t;
的意思是把指针p指向的那块内存付值t,
父子进程通过匿名映射实现共享内存:
#include
#include
#include
#include
typedef struct{
char name[4];
int age;
}people;
main(int argc, char** argv)
{
int i;
people *p_map;
char temp;
p_map=(people*)mmap(NULL,sizeof(people)*10,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0);
if(fork() == 0)
{
sleep(2);
for(i = 0;i
的意思是把指针p指向的那块内存付值t,
父子进程通过匿名映射实现共享内存:
#include
#include
#include
#include
typedef struct{
char name[4];
int age;
}people;
main(int argc, char** argv)
{
int i;
people *p_map;
char temp;
p_map=(people*)mmap(NULL,sizeof(people)*10,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0);
if(fork() == 0)
{
sleep(2);
for(i = 0;i