Portál AbcLinuxu, 10. listopadu 2025 11:46
// 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 ...
Řešení dotazu:
// 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é)
}
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.