Sqlite   发布时间:2022-05-22  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了用NETLINK实现磁盘满通知大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

转载时请注明出处和作者联系方式
文章出处:http://www.limodev.cn/blog
作者联系方式:李先静 <xianjimli at hotmail dot com>

手 机内置FLASH容量有限,在磁盘空间不足的情况下,应该提醒用户进行磁盘清理。这个处理在哪里做比较好呢?每次写入数据时由调用者检测显然是不合理的, 因为处理的太多了,何况修改sqlitE等第三方程序也是不明智的,那样会给升级版本带来麻烦。比较好的办法是在文件系统中做处理,最近同事修改了 yaffs2支持磁盘满通知功能。做法如下:

在yaffs_fs.c中:
#include <net/sock.h>
<linux/netlink.h>

#define disK_FulL_MSG_SIZE 128
#define NETlink_disK_FulL 2

static @H_801_34@struct sock * yaffs_sock;

在init_yaffs_fs中:
if((yaffs_sock = netlink_kernel_create(NETlink_disK_FulL,1,255);">NulL,THIS_MODulE)) == NulL)
{
printk(KERN_INFO"netlink_kernel_create fail./n");
}

在exit_yaffs_fs中:
if(yaffs_sock != NulL)
{
sock_release(yaffs_sock);
yaffs_sock = NulL;
}
增加两个函数:

@H_801_34@voID yaffs_notify_space_full(@H_801_34@const @H_801_34@char* partition,@H_801_34@char* type,87);">int @R_701_10586@lchunk,87);">int freechunk)
{
@H_801_34@size_t len = 0;
@H_801_34@char *scratch = NulL;
@H_801_34@struct sk_buff *skb = NulL;

@R_701_10586@lchunk >>= 10;
freechunk >>= 10;

len = disK_FulL_MSG_SIZE;
skb = alloc_skb(len,GFP_KERNEL);
if (skb)
{
scratch = skb_put(skb,len);
sprintf(scratch,255);">"diskevent: type=%s @R_701_10586@l=%dKB free=KB partition=",
type,@R_701_10586@lchunk,freechunk,partition);

NETlink_CB(skb).dst_group = 1;
netlink_broadcast(yaffs_sock,skb,255);">0,GFP_KERNEL);
}

return;
}

@H_801_34@voID yaffs_notify_app_if_space_full(yaffs_Device * dev)
{
if (yaffs_sock)
{
@H_801_34@char* type = NulL;
@H_801_34@int @R_701_10586@lchunk = (dev->endBlock - dev->startBlock + 1) * dev->nChunksPerBlock * dev->nDataBytesPerChunk;
@H_801_34@int freechunk = yaffs_GetnumberOfFreeChunks(dev) * dev->nDataBytesPerChunk;

if (freechunk < @R_701_10586@lchunk / 100)
{
type = "full";
}
else if (freechunk < @R_701_10586@lchunk * 5 / "low";
}

if(type != NulL)
{
yaffs_notify_space_full(dev->name,type,freechunk);
}
}

return;
}

在yaffs_AllocateChunk中:
yaffs_notify_app_if_space_full(dev);

NETlink是linux提供的一种用于内核与用户空间进程通信的方式,使用简单,传输效率高,hotplug事件也是通过这种方式通知udev的。

用户空间监听磁盘满事件的实现很简单,我提供了一个示例,有兴趣的朋友可以到这里下载。


欢迎到Linux mobile development上交流

大佬总结

以上是大佬教程为你收集整理的用NETLINK实现磁盘满通知全部内容,希望文章能够帮你解决用NETLINK实现磁盘满通知所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:那样会