当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 1 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 问个有关fork的问题
帖子发表于 : 2013-04-15 17:13 

注册: 2010-07-23 18:18
帖子: 8
送出感谢: 0 次
接收感谢: 0 次
程序本身是为了用ptrace函数来测试ltp的test case

比如open01这个用例中调用了SYS_open19次,那我想循环执行open01一共19次,然后每次注入一个SYS_open函数

现在的程序大概是这样的
代码:
    for(int i =0; i<19;i++)
    {
        child = fork();
        if(child == 0){
            ptrace(PTRACE_TRACEME,0,NULL,NULL);
            if(execl("/home/icelure/testcase/open01", "open01","-f", NULL) < 0){
                perror("error\n");
            }
        }
        else{
            tracer(child,i);
        }
    }


然后tracer大概是这样的
代码:
int tracer(int pid, int t_time){
    while(1) {
        wait(&status);
        if(WIFEXITED(status))
        {
            printf("%d\n",WEXITSTATUS(status));
            break;
        }
        orig_eax = ptrace(PTRACE_PEEKUSER,
                          pid, 4 * ORIG_EAX,
                          NULL);
        if(orig_eax == SYS_open) {
            time++;
            if(time < t_time){
                time++;
            }
            else if(time == t_time){
                if(insyscall == 0) {
                    /* Syscall entry */
                    insyscall = 1;

                }
                else { /* Syscall exit */
                    insyscall = 0;
                }
            }
        }
        printf("%d\n",time);
        ptrace(PTRACE_SYSCALL, pid, NULL, NULL);

    }


问题就是fork出来的进程的time变量好像是公用的,这样就没法记数了,这该怎么办? :em06


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 1 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译