Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    QFileSystemWatcher not working with /etc/mtab

    General and Desktop
    5
    13
    6860
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      TheQtGuy last edited by

      I'll try to be brief:

      My program should automatically sense when a USB device is plugged and also where that device was mounted. So far I've been able to sense the usb device plugged, as well as getting which device was inserted (i.e. /dev/sdc1).

      Knowing the device (i.e. /dev/sdc1) I can then simply look inside /etc/mtab to match that device with its mount point (i.e. /media/USBDRIVE). However when I try to find that device inside /etc/mtab, I get nothing, but if I tell the program to wait 1 second before trying to search inside /etc/mtab, it works, meaning my program was actually trying to find the device before it was actually added to /etc/mtab

      So what I did was instead of waiting 1 second to search in /etc/mtab, I created a QFileSystemWatcher for that file:

      @QFileSystemWatcher watcher = new QFileSystemWatcher(QStringList() << "/etc/mtab",this);@

      But watcher never detects any change in /etc/mtab! Even if try /proc/mounts which is the same file... What is weird is that for any file inside /home, QFileSystemWatcher will work, but for /etc or /proc files it won't work.

      I will thank you guys for any help, since the 1 second wait is not the best approach..

      1 Reply Last reply Reply Quote 0
      • L
        loladiro last edited by

        Judging from "this":http://qt.gitorious.org/qt-mobility/contacts/commit/e83fbfd/diffs patch applied to Qt Mobility, there is a bug in QFileSystemWatcher, preventing it from being used in /etc/mtab. Maybe the patch I liked to can help you, too.

        1 Reply Last reply Reply Quote 0
        • D
          dangelog last edited by

          Works for me -- are you returning to the event loop?

          Software Engineer
          KDAB (UK) Ltd., a KDAB Group company

          1 Reply Last reply Reply Quote 0
          • T
            TheQtGuy last edited by

            loladiro: I read that page before, but I didn't quite understood what was going on...

            peppe: I don't know what would be to return to the event loop, but my guess is that my code is correct, otherwise it wouldn't work with files inside /home directory right?

            @watcher = new QFileSystemWatcher(QStringList() << "/etc/mtab",this);
            connect(watcher, SIGNAL(fileChanged(const QString &)), this, SLOT(getPathFromFile(const QString &)));@

            If I change "/etc/mtab" to say a file in my home folder, the fileChanged signal is emitted, but not for "etc/mtab" file :(

            1 Reply Last reply Reply Quote 0
            • L
              loladiro last edited by

              The patch to Qt Mobility I linked basically changes the QFilesSystemWatcher and uses its inotify backend for linux. I think it is pretty straight forward what is going on, and since it does exactly what you want (listening for new devices), it might be worth it for you to see what's going on and how they replaced the old QFileSystemWatcher syntax (in red) with inotify (in green).

              1 Reply Last reply Reply Quote 0
              • D
                dangelog last edited by

                Can you paste a small, correct, compilable example that shows your problem? I know QFSW is bugged, but it appears to be working fine for me (inotify backend, Linux 3.0).

                Software Engineer
                KDAB (UK) Ltd., a KDAB Group company

                1 Reply Last reply Reply Quote 0
                • McLion
                  McLion last edited by

                  Sorry to dig this thread up and hijack it.
                  How do you get an event when an USB device is plugged (ie. Memory stick as dev/sda1)?

                  1 Reply Last reply Reply Quote 0
                  • J
                    jafarabadi.qt last edited by

                    Hi TheQtGuy
                    i don't have any efficient solution but offer some idea:

                    • Run Qt Creator as root :)
                      @sudo -b qtcreator@

                    • your real-time access problem is with Dir o File? check it !

                    say more about ur prob. and share ur experience dear ;)

                    1 Reply Last reply Reply Quote 0
                    • McLion
                      McLion last edited by

                      @ a.jafarabadi: ???

                      1 Reply Last reply Reply Quote 0
                      • J
                        jafarabadi.qt last edited by

                        excuse me friend because of my low english writing ability
                        i think that you want check your USB devices, and for doing it, you watch a file usign filewatcher that OS change it when a new usb connect or disconnect, but your watch doesn't work and does not determine any change in file.
                        now you want understand why this problem occured? YES?

                        1 Reply Last reply Reply Quote 0
                        • McLion
                          McLion last edited by

                          Not exactly.
                          If I attach a UBS memorystick it does not get mounted automatically so I can not monitor /etc/mtab.
                          I need to somehow catch the USB plug event and get the device path (i.e. /dev/sda1) and then handle the mount from my Qt code.

                          1 Reply Last reply Reply Quote 0
                          • McLion
                            McLion last edited by

                            .. or could QFileSystemWatcher used to monitor the /dev ?
                            This way I t could generate an event when an sd?? is added.

                            1 Reply Last reply Reply Quote 0
                            • McLion
                              McLion last edited by

                              Just like to add that this works as proposed using QFileSystemWatcher used to monitor the /dev. On the event I do some filtering using QDir ... that's it.

                              1 Reply Last reply Reply Quote 0
                              • First post
                                Last post