C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了克隆()系统调用C和共享大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用clone()系统调用来创建一个与父进程共享资源的线程.
在本书中,我读到如果我使用以下标志,我将能够这样做:
CLONE_VM | CLONE_FILES | CLONE_SIGHAND | CLONE_FS

但似乎变量没有被分享.

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <linux/sched.h>
#include <String.h>
#define STACK_SIZE 65536
#define BUFSIZE 200
int n = 5;
int Child(void *);
int main() {
    pid_t pid;
    char *stack;
    stack = malloc(STACK_SIZE);
    pid = clone(Child,stack + STACK_SIZE,CLONE_SIGHAND|CLONE_FS|CLONE_VM|CLONE_FILES);
    wait(null);
    char buf[BUFSIZE];
    sprintf(buf,"BACk to parent: Value of n: %d\n",n);
    write(1,buf,strlen(buf));
    return 0;
}
int Child(void *args) {
    n += 15;
    char buf[BUFSIZE];
    sprintf(buf,"In child: Value of n: %d\n",n); 
    write(1,strlen(buf));
}

输出也在不断变化.我糊涂了.

解决方法

int n = 5;
int Child(void *);
int main() {
    int n = 5;

你有两个名为n的变量. Child在全局上运行,但main使用其范围中定义的那个.

您还应该将等待调用更改为waitpid(-1,NULL,__ WAL),否则您实际上不会等待克隆进程. (或者您可以将| SIGCHLD添加到克隆选项中.)

来自clone(2)文档:

大佬总结

以上是大佬教程为你收集整理的克隆()系统调用C和共享全部内容,希望文章能够帮你解决克隆()系统调用C和共享所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。