克隆()系统调用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: %dn",n); write(1,buf,strlen(buf)); return 0; } int Child(void *args) { n += 15; char buf[BUFSIZE]; sprintf(buf,"In child: Value of n: %dn",n); write(1,strlen(buf)); } 输出也在不断变化.我糊涂了. 解决方法int n = 5; int Child(void *); int main() { int n = 5; 你有两个名为n的变量. Child在全局上运行,但main使用其范围中定义的那个. 您还应该将等待调用更改为waitpid(-1,NULL,__ WAL),否则您实际上不会等待克隆进程. (或者您可以将| SIGCHLD添加到克隆选项中.) 来自
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c – 反复阅读和写作之间的交替
- 在WINCE下使用sqlite数据库
- c# – 在DataTemplate中使用时,ListView.View为null
- Swift替代performSelectorOnMainThread
- ruby-on-rails – 以百分比表示处理第三方付款(使用PayPal)
- 仿百度文库制作(2)-----------flexpaper
- SQLite ORDER BY字符串,包含以0开头的数字
- tdd – 持续集成和验收测试驱动开发
- 我编写了C代码来将boost :: optional视为一个范围,但它不能
- Swift使用MMDrawerController框架打造通用侧滑抽屉效果模版