Portál AbcLinuxu, 7. května 2025 21:48

Dotaz: Sledování změny /proc/self/mountinfo v Qt

Jardík avatar 7.6.2010 22:43 Jardík | skóre: 40 | blog: jarda_bloguje
Sledování změny /proc/self/mountinfo v Qt
Přečteno: 212×
Odpovědět | Admin
Pokouším se pomocí Qt zachytávat připojení/odpojení zařízení, ale nějak mi to nefunguje.

// deklarované v objektu
QFile file;
QTextStream strm;
QSocketNotifier *notifier;

// v konstruktoru
file.setFileName("/proc/self/mountinfo");
if (file.open(QIODevice::ReadOnly))
{
  strm.setDevice(&file);
  notifier = new QSocketNotifier(file.handle(), QSocketNotifier::Read);
  connect(notifier, SIGNAL(activated(int)), SLOT(onMountInfoChanged(int)));
}

// onMountInfoChanged(int)
qDebug() << strm.readAll();
Problém je, že onMountInfoChanged() je volán každou chvíli, aniž by se něco připojilo/odpojilo, strm.readAll() nevrací vůbec nic ...
Věřím v jednoho Boha.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Jardík avatar 7.6.2010 22:57 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Sledování změny /proc/self/mountinfo v Qt
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkoušel jsem ještě QFileSystemWatcher, ale to se zdá být také nefunkční ...
Věřím v jednoho Boha.
Jardík avatar 7.6.2010 23:40 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Sledování změny /proc/self/mountinfo v Qt
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak jsem na to přišel:
// v třídě objektu
int fd;
QSocketNotifier *notifier;

// v konstruktoru
fd = ::open("/proc/self/mountinfo", O_RDONLY);
if (fd != -1)
{
  notifier = new QSocketNotifier(fd, QSocketNotifier::Exception);
  connect(notifier, SIGNAL(activated(int)), SLOT(onMountInfoChanged(int)));
}

void onMountInfoChanged(int)
{
  // tady je třeba ještě jednou otevřít a přečíst z nového descriptoru, ze
  // starého už nic nepřečteme (teda přečteme, ale jen poprvé)
}
Věřím v jednoho Boha.
8.6.2010 18:52 zulu
Rozbalit Rozbalit vše Re: Sledování změny /proc/self/mountinfo v Qt
Proč znovu otevřít, to je nějaké divné, ne? Nestačí seeknout zpátky na začátek souboru?
Jardík avatar 8.6.2010 20:30 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Sledování změny /proc/self/mountinfo v Qt
Nevím, můžu seekovat v /proc souboru? Kdysi mi ani nefungovalo čtení po bytech a bylo nutné přečíst celý soubor najednou...
Věřím v jednoho Boha.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.