免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1918 | 回复: 3
打印 上一主题 下一主题

[C] 请问这结构体怎么变的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-02 16:57 |只看该作者 |倒序浏览
在看linux文件系统的源代码的时候,如下:
*(struct d_inode *)inode =
                ((struct d_inode *)bh->b_data)
                        [(inode->i_num-1)%INODES_PER_BLOCK];

把一个char* 强制转化为struct d_indoe * 类型的,后面加上[] 什么意思。
字符串和结构体可以进行转化?

struct m_inode * inode;
bh->data 是char* 类型的

//磁盘上的inode
struct d_inode {
        unsigned short i_mode; //文件类型和属性
        unsigned short i_uid; //uid
        unsigned long i_size; //size,文件大小,在pipe里面是pipe使用的page的addr
        unsigned long i_time; //修改时间
        unsigned char i_gid; // gid
        unsigned char i_nlinks;// 链接数
        unsigned short i_zone[9];/*直接(0-6)、间接(7)、或双重间接(逻辑块号*/
};

//内存中的inode
struct m_inode {
        unsigned short i_mode;
        unsigned short i_uid;
        unsigned long i_size;
        unsigned long i_mtime;
        unsigned char i_gid;
        unsigned char i_nlinks;
        unsigned short i_zone[9];
/* these are in memory also */
        struct task_struct * i_wait; //等待该节点的任务
        unsigned long i_atime; //最后访问时间
        unsigned long i_ctime; //最后修改时间
        unsigned short i_dev; //所在的设备号
        unsigned short i_num; //i节点号
        unsigned short i_count; //i节点使用的次数
        unsigned char i_lock; //锁定标志
        unsigned char i_dirt; //已修改(脏)数据
        unsigned char i_pipe; //管道标志
        unsigned char i_mount; //安装标志
        unsigned char i_seek; //搜索标志(lseek)
        unsigned char i_update; //更新标志
};

论坛徽章:
0
2 [报告]
发表于 2008-11-02 18:50 |只看该作者
*(struct d_inode *)inode =
                ((struct d_inode *)bh->b_data)
                        [(inode->i_num-1)%INODES_PER_BLOCK];

个人决定是这样:就是给inode 指向的空间复制(结构体),赋值为以bh->b_data为首地址的数组(强制转换)中的一个成员

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
3 [报告]
发表于 2008-11-02 20:23 |只看该作者
先回去看看 <<C与指针>> 吧。

论坛徽章:
0
4 [报告]
发表于 2008-11-03 11:00 |只看该作者
struct test
  {
    char a;
    char b;
  };

  char * tmp ="abcdef";

  struct test *pig = malloc(sizeof(struct test));
  *pig = ((struct test *)tmp)[1];
  printf("%c\n",pig->a);
  printf("%c\n",pig->b);


网友们都不系的回答这个问题。
输出 c
        d
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP