![]() |
|
||||||||||||||
| | 首页 | 新闻 | 文库 | 方案 | 技术 | 独家 | 座谈 | 下载 | 图库 | 开发板 | 仿真器 | 邮购 | VIP | 芯片 | 客户评价 | 论坛 | | ||
|
||
|
|||||
| uclinux-2008R1-RC8(bf561)到VDSP5的移植(13):未命名union的问题 | |||||
作者:快乐虾 文章来源:http://blog.csdn.net/lights_joy 点击数: 更新时间:2008-5-6 ![]() |
|||||
|
在include/linux/shed.h中定义了一个结构体:
/*
* NOTE! "signal_struct" does not have it's own
* locking, because a shared signal_struct always
* implies a shared sighand_struct, so locking
* sighand_struct is always a proper superset of
* the locking of signal_struct.
*/
struct signal_struct {
…
/* job control IDs */
pid_t pgrp;
struct pid *tty_old_pgrp;
union {
pid_t session __deprecated;
pid_t __session;
};
…
};
在include/linux/init_task.h中定义了一个宏来对这个结构体进行初始化:
#define INIT_SIGNALS(sig) { \
.count = ATOMIC_INIT(1), \
.wait_chldexit = __WAIT_QUEUE_HEAD_INITIALIZER(sig.wait_chldexit),\
.shared_pending = { \
.list = LIST_HEAD_INIT(sig.shared_pending.list), \
.signal = {{0}}}, \
.posix_timers = LIST_HEAD_INIT(sig.posix_timers), \
.cpu_timers = INIT_CPU_TIMERS(sig.cpu_timers), \
.rlim = INIT_RLIMITS, \
.pgrp = 0, \
.tty_old_pgrp = NULL, \
{ .__session = 0}, \
}
在这里
{ .__session = 0}, \
会引发一个错误:
"..\..\arch\blackfin\kernel\init_task.c", line 38: cc0136: error: union
"<unnamed>" has no field "__session"
static struct signal_struct init_signals = INIT_SIGNALS(init_signals);
怎么看都有__session这个成员啊,实际引发这个错误的原因是在结构体中使用了未命名的union。因此必须做如下修改:
struct signal_struct {
…
/* job control IDs */
pid_t pgrp;
struct pid *tty_old_pgrp;
union {
pid_t session __deprecated;
pid_t __session;
}signal_struct_session;
…
};
其实就是随便给这个union定义一个变量。
|
|||||
| 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 本站介绍 | 合作联络 | 欢迎投稿 | 广告业务 | 网站地图 | 设为首页 | 加入收藏 | 友情链接 | 网站公告 | 联系我们 | | |||
|