Portál AbcLinuxu, 7. května 2025 21:48
// 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.