Linux常见文件结构体有哪些

Linux常见文件结构体有哪些,第1张

linux虚拟文件系统核心数主要有以下几个数据结构: * 超级块结构(struct super_block {...} ) 该结构保存了一个被安装在linux系统上的文件系统的信息。对于基于磁盘的文件系统,该结构一般和保存在磁盘上的"文件系统控制块"对应。

struct file结构体定义在include/linux/fs.h中定义。文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创建,并传递给在文件上进行 *** 作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。在内核创建和驱动源码中,struct file的指针通常被命名为file或filp。

浅谈结构体及linux下内存分配原则结构体在程序中的应用是很广泛的,要处理的问题越复杂,数据量越多月杂,就越需要用到结构体。比如网络,内核,驱动等等。熟练使用结构体对每个程序员都是至关重要的。一个好的结构体不仅能使程序体系结构清晰,而且使得 *** 作灵活,可扩展性强。linux网络之所以很强大,这和它里设计合理的数据结构有很大关系。

www.zhishiwu.com

结构体定义:[cpp]<span

style=font-size:18px>struct

a{

int

xx:4

int

yy:4

}</span>

结构体初始化:方式一:[cpp]<span

style=font-size:18px>struct

a

aa

={

xx:2,

yy:3

}</span>

www.zhishiwu.com

方式二:[cpp]<span

style=font-size:18px>struct

a

cc

={

.xx=6,

.yy=1,

}</span>

方式三:[cpp]<span

style=font-size:18px>struct

a

dd={4,2}</span>

在定义中,可以限制变量的位的作用域,比如上面的:int

xx:4这表明xx的有效域只有4位,也就是能给他赋值的最大值为15,如果超过这个值,编译器就会报错:warning:

overflow

in

implicit

constant

conversion。在这里如果你给xx赋值为15,如:[cpp]<span

style=font-size:18px>struct

a

cc

={

.xx=15,

.yy=1,

}</span>

www.zhishiwu.com

然后输出:[cpp]<span

style=font-size:18px>printf(cc.xx

=

%d/n,cc.xx)</span>

结果会是:-1因为这里定义的xx为int

型,15的二进制位1111,最高位为1,表示为负数,所以取反加1后为0001。所以是-1。这种位域 *** 作的好处是当你不需要用到你定义的类型的长度时,可以加位域 *** 作以节省内存空间。引出的其他问题这里用sizeof(struct

a)得到的是4,如果不加位域限制则是8,至于为什么是4呢?4bit+4bit应该刚好是1byte啊,应该是1才对啊。这是因为我是在linux下编译执行的,而在linux对内存分配最小值为类型值的一半。(我在linux下做了实验)如下我定义了一个结构体:[cpp]<span

style=font-size:18px>struct

a{

short

int

xx:2

short

int

yy:2

}bb</span>

如上,我定义二个short

int类型值,short

int在32位linux下为2字节,这里二个相加不足一字节,但是输出sizeof(struct

a)的值为2。不足一字节系统自动补满一字节。[html]<span

style=font-size:18px>struct

a{

short

int

xx:9

short

int

yy:2

}bb</span>

www.zhishiwu.com

这个输出也是2。xx超过一字节,但是9+2=11,还没有超过16(2字节),我猜系统将xx超过的那1bit分到了yy那1bit里面了。[cpp]<span

style=font-size:18px>struct

a{

short

int

xx:9

short

int

yy:9

}bb</span>

这个输出是4。9+9=18,超过了16,系统各分配了2字节给xx和yy。作者

linuxblack125125


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7161085.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-02
下一篇 2023-04-02

发表评论

登录后才能评论

评论列表(0条)

保存