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() ) );


你可能感兴趣的:(qtopia监测磁盘(sd卡等)mount umount)