QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 626|回复: 0

setcontext

[复制链接]
发表于 2005-2-15 17:04:20 | 显示全部楼层 |阅读模式
在setcontext(2)中有一个数据结构:
typedef struct ucontext
                {
                    unsigned long int uc_flags;
                    struct ucontext *uc_link;
                    stack_t uc_stack;
                    mcontext_t uc_mcontext;
                    __sigset_t uc_sigmask;
                    struct _fpstate __fpregs_mem;
                  } ucontext_t;

其中uc_stack是什么stack啊?

我写一个程序测试它:
--------------------------------------------------------------------------------
int main(int argc, char **argv) {

    // change stack size
    ucontext_t ut;
    int resource;
    int shmid;
    void *pttr;
   
      
    shmid = shmget(300, 4096*1024, SHM_HUGETLB|IPC_CREAT|SHM_R|SHM_W);
    pttr = shmat(shmid, 0, 0);
    if(pttr == -1) {
            perror("shmat");
            return -1;
    }
    if(getcontext(&ut) == 0) {
        printf("ut.uc_stack\n");
                printf("\tss_sp = %x\n", ut.uc_stack.ss_sp);
                printf("\tss_flags = %x\n", ut.uc_stack.ss_flags);
                printf("\tss_size = %x\n", ut.uc_stack.ss_size);
                printf("\nNow set new value to user stack......\n");
                ut.uc_stack.ss_sp = pttr;
                ut.uc_stack.ss_size = 1024;
                setcontext(&ut);

    } else {
        perror("getcontext");
    }

    return 0;
}

-------------------------------------------------------------------------------------
一旦使用setcontext, 上述程序会陷入getcontext的死循环。
还有ut.uc_stack.ss_sp的值和size都是0.不懂啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 15:39 , Processed in 0.069389 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表