这是我的代码
int main()
{
pid_t pid;
int y = 3;
if ( (pid = fork()) <0 )
return -1;;
if( pid == 0 ) /* child */
{
printf(" before: %d %p\n", y, &y );
y *= 10;
printf("after: %d %p\n", y, &y );
}
else /* father */
{
sleep(1);
printf("father: %d %p\n" , y , &y );
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序的输出如下:
before: 3 ffbff440
after: 30 ffbff440
father: 3 ffbff440
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么孩子和父母的变量的地址相同但价值不同?
由于某些原因,我需要调用系统的一些系统调用(Linux)我检查了'syscall'包的文档,但找不到任何关于它的信息.
然后我刚看到一个包装windows apis 的项目(https://github.com/AllenDang/w32/blob/master/kernel32.go).我读了一下它的源代码.
它用
modkernel32 = syscall.NewLazyDLL("kernel32.dll")
Run Code Online (Sandbox Code Playgroud)
加载动态库.但是,没有函数NewLazyDLL()的文档
我确信Linux/UNIX应该有类似的功能.有没有人可以告诉我函数的名称或在Golang中调用Linux系统调用或从libc.so加载函数的方法?
更多细节
我想调用系统调用'守护进程'或'fork'(我想守护进程),因为我找不到golang库提供它们.