qtopia监测磁盘(sd卡等)mount umount

作者:帅得不敢出门    c++哈哈堂31843264

不多说,看源码.

首先qpe 中会进行/etc/mtab的检测.

void SysFileMonitor::timerEvent(QTimerEvent*)  // 这里只列出部分检测代码

{

    // st_size is no use, it's 0 for /proc/mounts too. Read it all.
    static int mtabSize = 0;
    QFile f( "/etc/mtab" );
    if ( f.open(IO_ReadOnly) ) {
QString s;
while( !f.atEnd() ) {
   QString tmp;
   f.readLine( tmp, 1024 );
   s += tmp;
}
if ( (int)s.length() != mtabSize ) {     // 对文件大小进行对比, 不相等说明/etc/mtab有变动, 然后通知其他程序.
   mtabSize = (int)s.length();
#ifndef QT_NO_COP
   QCopEnvelope("QPE/Card", "mtabChanged()" );
#endif
}

}


qtopia 中有个StorageInfo类(其他子程序可以通过它来接收/etc/mtab有变动的通知), 

StorageInfo::StorageInfo( QObject *parent )

    : QObject( parent )
{
#ifndef QT_NO_COP
    channel = new QCopChannel( "QPE/Card", this );
    connect( channel, SIGNAL(received(const QCString&,const QByteArray&)),
         this, SLOT(cardMessage(const QCString&,const QByteArray&)) );
#endif
    update();
}

void StorageInfo::cardMessage( const QCString& msg, const QByteArray& )
{
    if ( msg == "mtabChanged()" )
    update();
}

比如插入sd卡,并 mount到/sdcard后.

/etc/mtab下会添加类似
/dev/mmcblk0p1 /sdcard vfat rw,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 0
的文本
update()中,会分析这个/etc/mtab
如果该目录是已存在 则emit disksChanged();信号.  告诉程序,磁盘发生改变.

程序会由这个信号进行数据更新, 示例代码如下: 

StorageInfo *storage_info = new StorageInfo(this);

connect( storage_info, SIGNAL( disksChanged() ), this, SLOT( reload() ) );


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值