多层嵌套的结构体如何初始化?

boluor1987 2009-03-19 09:28:51
在写一个模块时,发现一个函数的参数是一个结构体A。结构体A中有很多成员,包括结构体B,C,D,枚举成员E,F,整形G.而结构体B,C,D又包含一些结构体.请问,现在想给结构体A初始化,应该怎么写?有没有类似memset之类的函数,可以不必考虑那么多.
谢谢!
...全文
1157 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
boluor1987 2009-03-21
  • 打赏
  • 举报
回复
恩.现在在研究redirFS.感觉这个比较有前景,但是研究的人太少了,讨论的人不多。
boluor1987 2009-03-21
  • 打赏
  • 举报
回复
恩.现在在研究linux下的redirFS.这种访问技术感觉蛮有前途,就是搞这个的人太少了.遇到问题没个讨论的.
Heaven_Redsky 2009-03-20
  • 打赏
  • 举报
回复
LZ这个结构体也不是很大嘛
仔细看一下 结合应用也就半个小时就能搞明白了
想做明白没有耐心是不行的
zzg_samsung 2009-03-20
  • 打赏
  • 举报
回复
给每个内部结构体,各写一个初始化函数
paul_chao 2009-03-19
  • 打赏
  • 举报
回复

memset(&A, 0, sizeof(A));

不知是不是您要的.

Paul, Chao @ Techware.
bxhzct 2009-03-19
  • 打赏
  • 举报
回复
好贴,结构体,很深啊
llKK0616 2009-03-19
  • 打赏
  • 举报
回复
有点耐心,做技术哪有那么容易。
boluor1987 2009-03-19
  • 打赏
  • 举报
回复
这到猴年马月了阿...郁闷.
cnzdgs 2009-03-19
  • 打赏
  • 举报
回复
要先了解每个成员的含义和用法才行。
boluor1987 2009-03-19
  • 打赏
  • 举报
回复
类似这样的结构体.是内核模块阿.memset这样初始化可以吗?应该不可以吧.

struct dentry {
atomic_t d_count;
unsigned int d_flags; /* protected by d_lock */
spinlock_t d_lock; /* per dentry lock */
struct inode *d_inode; /* Where the name belongs to - NULL is
* negative */
/*
* The next three fields are touched by __d_lookup. Place them here
* so they all fit in a cache line.
*/
struct hlist_node d_hash; /* lookup hash list */
struct dentry *d_parent; /* parent directory */
struct qstr d_name;

struct list_head d_lru; /* LRU list */
/*
* d_child and d_rcu can share memory
*/
union {
struct list_head d_child; /* child of parent list */
struct rcu_head d_rcu;
} d_u;
struct list_head d_subdirs; /* our children */
struct list_head d_alias; /* inode alias list */
unsigned long d_time; /* used by d_revalidate */
struct dentry_operations *d_op;
struct super_block *d_sb; /* The root of the dentry tree */
void *d_fsdata; /* fs-specific data */
#ifdef CONFIG_PROFILING
struct dcookie_struct *d_cookie; /* cookie, if any */
#endif
int d_mounted;
unsigned char d_iname[DNAME_INLINE_LEN_MIN]; /* small names */
};

struct vfsmount {
struct list_head mnt_hash;
struct vfsmount *mnt_parent; /* fs we are mounted on */
struct dentry *mnt_mountpoint; /* dentry of mountpoint */
struct dentry *mnt_root; /* root of the mounted tree */
struct super_block *mnt_sb; /* pointer to superblock */
struct list_head mnt_mounts; /* list of children, anchored here */
struct list_head mnt_child; /* and going through their mnt_child */
int mnt_flags;
/* 4 bytes hole on 64bits arches */
const char *mnt_devname; /* Name of device e.g. /dev/dsk/hda1 */
struct list_head mnt_list;
struct list_head mnt_expire; /* link in fs-specific expiry list */
struct list_head mnt_share; /* circular list of shared mounts */
struct list_head mnt_slave_list;/* list of slave mounts */
struct list_head mnt_slave; /* slave list entry */
struct vfsmount *mnt_master; /* slave is on master->mnt_slave_list */
struct mnt_namespace *mnt_ns; /* containing namespace */
int mnt_id; /* mount identifier */
int mnt_group_id; /* peer group identifier */
/*
* We put mnt_count & mnt_expiry_mark at the end of struct vfsmount
* to let these frequently modified fields in a separate cache line
* (so that reads of mnt_flags wont ping-pong on SMP machines)
*/
atomic_t mnt_count;
int mnt_expiry_mark; /* true if marked for expiry */
int mnt_pinned;
int mnt_ghosts;
/*
* This value is not stable unless all of the mnt_writers[] spinlocks
* are held, and all mnt_writer[]s on this mount have 0 as their ->count
*/
atomic_t __mnt_writers;
};
rzsheng 2009-03-19
  • 打赏
  • 举报
回复
memset(&A, 0, sizeof(A));

可以将结构体内的所有变量置0,
如果结构体里面是结构体,那么这个结构体内部的变量也被置0

内部成员是结构体指针变量,那么这个指针也将被置NULL。


21,608

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧