克隆之后,经由指针访问在父变量()(Accessing variables in the paren

2019-10-19 02:00发布

我的时候可能会要求一个白痴的问题很抱歉,但我在C的血腥初学者现在我的问题是,我需要访问两个变量,在主宣称,在一个子进程,并修改它们。 听起来很简单,但我必须使用克隆和反推的变量,以我的数组后,他们完全搞砸了concerining值。

int main (){
uint64_t N = 10000000;
uint64_t tally = 0;
int status;

void** child_stack = (void**)malloc(65536);
uint64_t** package = (uint64_t**)malloc(sizeof(uint64_t*)*2);
package[0] = &tally;
package[1] = &N;

pid_t cpid;
cpid = clone(child_starter, &child_stack, CLONE_VM , (void*)package);
waitpid(cpid, &status, __WCLONE);
return 0;
}

在child_starter功能如下所示:

int child_starter(void* package){
printf( "Tally is in the child %" PRIu64 "\n", *((int64_t**)package)[0] );
return 0;
}

因为理货是0,我认为我的printf实际上应该打印出0,但它更像是从运行140541190785485变更运行..

希望你能帮我 :)

Answer 1:

  • child_stack已经是一个指向有效的内存,所以不通过其地址,但它的价值。
  • 堆栈增长从上到下,至少在几乎所有的Linux实现,所以堆栈指针传递需要分配堆栈内存的结束。


cpid = clone(child_starter, ((char *) child_stack) + 65536, CLONE_VM , package); 

也是用C有没有需要转换为(void*)

此外^ 2 printf()是不可重入的,所以它这里使用的是容易出错。



文章来源: Accessing variables in the parent via pointer after clone()
标签: c clone