看linux0.12内核遇到个很奇怪的赋值,求教用意.
出自linux/kernel/signal.c
C/C++ code
上面
*(&restart) = 1;
*(&old_mask) = current->blocked;
这2个干巴巴的指针操作让我很奇怪,在内核代码中难道能起到啥特别作用么?望高手解答.
C/C++ code
int sys_sigsuspend(int restart, unsigned long old_mask, unsigened long set) { extern int sys_pause(void); if (restart) { current->blocked = old_mask; return -EINTR; } *(&restart) = 1; *(&old_mask) = current->blocked; current->blocked = set; (void) sys_pause(); return -ERESTARTNOINIR; }
上面
*(&restart) = 1;
*(&old_mask) = current->blocked;
这2个干巴巴的指针操作让我很奇怪,在内核代码中难道能起到啥特别作用么?望高手解答.
作者: geine007 发布时间: 2011-05-09
给参数赋值过后貌似没有使用,看不懂。做个记号
作者: yuanlulu 发布时间: 2011-05-09
实在不清楚这个用法的用意,而且参数的传递不是指针传递,在进入函数的时候,参数是会被复制的.这里怎么修改都不可能修改到函数调用之前压栈的内容啊.
作者: geine007 发布时间: 2011-05-09