Hi����ӭ����Ƕ��ʽ��ѵ�߶�Ʒ�� - ����Զ����������<�����ܲ�����>��רעǶ��ʽ����ʦ����15�꣡
��ǰλ��: > ����Զ���������� > Ƕ��ʽѧϰ > ��ʦ���� > �ҿ�linux�ں���container_of��������ɴ
�ҿ�linux�ں���container_of��������ɴ
ʱ�䣺2016-12-22���ߣ�����Զ��

��linux �ں�����һ�����������ĺ�container_of()�������������������أ������������������ں�������������ġ�

�Ǻǣ�էһ����֪����ʲô������

������������һ��container_of(ptr,type,member),��������ptr,type,member�ֱ����ָ�롢���͡���Ա����һ������:

Struct test
        {
                int i;
                int j;
                char k;
        };
        Struct test temp;

�������������ͨ��temp.j�ĵ�ַ�ҵ�temp���׵�ַ�Ϳ���ʹ��container_of(&temp.j,struct test,j);

��������֪��container_of()�����þ���ͨ��һ���ṹ������һ����Ա�ĵ�ַ�ҵ�����ṹ��������׵�ַ��

�����������Ƚϸ��ӵ�����:

�����������struct test��չһ��

Const typeof(((struct test *)0)->j) * __mptr = (&temp.j);

���У�typeof��GNU C�Ա�׼C����չ�����������Ǹ��ݱ�����ȡ���������͡���ˣ��������������������ʹ��typeof��ȡ�ṹ���Աj������Ϊint,Ȼ��һ��intָ�����͵���ʱ����__mptr,�����ṹ������еij�Ա�ĵ�ַ������ʱ����__mptr��

(struct test *)((char *)__mptr - offsetof(struct test,j));

������������һ��offsetof(struct test,j)�������ں������¶���

չ��(size_t)&((struct test *)0)->j,����ʲô������

һ��ʼҲ�����ף�����Ҫ��л����ʦ��ʦ�����İ�����һ�ᆰ��������,�Ǻǣ�������������⡣

����size_t������,��ô���ǿ���֪���յĽ����һ������ֵ��Ҳ����j�����0��ַ��ƫ������Ҳ����������ʣ�������ô�����������濴������:

��������:

����û������ѵڶ���ֵ ��ȥ��һ��ֵ�����ܵõ���һ��ֵ��

�ڻ���һ����:

(struct test *)((char *)__mptr - offsetof(struct test,j));

�Dz��ǿ��Ի�ýṹ�����temp���׵�ַѽ���Dz���̫������ѽ��linux�ں���������һ���������˾���Ǻǣ������linux�˽�dz����ţ�ˣ����кܳ�һ��·��

��������
�����б���������۽������ѱ����˿���������������վͬ����۵��֤ʵ��������