炫意html5
最早CSS3和HTML5移动技术网站之一

文件系统 – Linux内核API inode_add_bytes

inode_add_bytes()函数的功能是增加inode节点的字节数,增加的量由参数loff_t bytes决定。函数执行过程是首先把增加的量右移9位与inode->i_blocks相加,即增加的量大于一个扇区的字节的部分与i_blocks相加,然后将不足一个扇区的部分与inode->i_bytes相加,完成给节点增加字节。

inode_add_bytes文件包含

#include <linux/fs.h>

inode_add_bytes函数定义

在内核源码中的位置:linux-3.19.3/fs/stat.c

函数定义格式:

void inode_add_bytes(struct inode *inode, loff_t bytes)

inode_add_bytes输入参数说明

  • inode:要被增加的字节的inode结构体,对于inode结构体,其定义及详细说明参考本教程中d_find_alias()函数的参数说明部分。
  • bytes:要增加的字节数,其类型为loff_t型变量,其定义为:
typedef __kernel_loff_t            loff_t;

其中__kernel_loff_t定义如下:

typedef long long __kernel_loff_t;

inode_add_bytes返回参数说明

  • inode_add_bytes()函数无返回值。

inode_add_bytes实例解析

编写测试文件:inode_add_bytes.c

头文件声明如下:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/fs_struct.h>
#include <linux/path.h>
#include <linux/sched.h>
MODULE_LICENSE("GPL");

模块初始化函数:

int inode_add_bytes_init(void)
{
struct dentry *dentry;
struct inode *inode;
loff_t num1 = 8;
dentry = current->fs->pwd.dentry;     //获取当前文件的入口目录
inode = dentry->d_inode;              //获取当前文件的inode节点
unsigned long data6 = inode_get_bytes(inode); //获取inode节点的字节数
printk("The result of   \"inode_get_bytes\" is :%ld\n", data6);
// 显示当前inode节点的字节数
inode_add_bytes(inode, num1);         //给inode节点的增加8个字节
printk("Exec \"inode_add_bytes\" begins:\n");
printk("Then, The result is :%ld\n", inode_get_bytes(inode));
// 显示函数调用之后inode节点的字节数
return 0;
}

模块退出函数:

void inode_ add_bytes_exit(void)
{
printk("Goodbye inode_add_bytes\n");
}

模块初始化及退出函数调用:

module_init(inode_ add_bytes_init);
module_exit(inode_ add_bytes_exit);

实例运行结果及分析:

首先编译模块,执行命令insmod inode_ add_bytes.ko插入模块,然后执行命令dmesg -c,会出现如图所示的结果。

Linux内核API inode_add_bytes

结果分析:

函数inode_add_bytes()执行之前,当前文件对应的inode节点的字节数是4096,函数inode_add_bytes()执行之后,inode节点的字节数变为4104,说明增加了8字节,而函数的第二个参数的值为8。

炫意HTML5 » 文件系统 – Linux内核API inode_add_bytes

Java基础教程Android基础教程