Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Qt fails to copy file on ubuntu.
Forum Updated to NodeBB v4.3 + New Features

Qt fails to copy file on ubuntu.

Scheduled Pinned Locked Moved Unsolved General and Desktop
23 Posts 6 Posters 5.0k Views 3 Watching
  • 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.
  • kshegunovK kshegunov

    @Qingshui-Kong said in Qt fails to copy file on ubuntu.:

    But I don't know the reason. Could you tell me that, if you know?

    This is your hint:
    @mrjj said in Qt fails to copy file on ubuntu.:

    You do unmount the USB stick after copy to it?

    On Linux you most often run extX kind of a filesystem, which is a journaling file system. This means that writes, moves and w/e else operations you do, don't happen synchronously (i.e. immediately when you issue it). You can think of the journal as kind of transaction processing. You want that because file operations are usually consisting of many small actual writes to the nonvolatile memory and if something interrupts any of them you don't want your filesystem to be gone for good. This however implies that the journal has to be flushed, and if you don't do it explicitly for many devices it is done implicitly when you umount them. Since you don't umount your USB, the journal is never flushed and no data is in actuality written on the stick. sync does exactly that - you explicitly flush the journal, thus even when you don't umount the device it does contain the actual data. As an advice: always unmount your devices.

    Q Offline
    Q Offline
    Qingshui Kong
    wrote on last edited by
    #12

    @kshegunov Thank you very much for telling me the details. Now I know the reason why I can solve the issue by using sync.

    I can't umount the device, because my application is showing fullscreen. So I can't operate the system. I think I can add a function to my software to umount the device.

    But I still wonder why doing the cp from a shell works even though I don't umount the device.

    JonBJ 1 Reply Last reply
    0
    • Q Qingshui Kong

      @kshegunov Thank you very much for telling me the details. Now I know the reason why I can solve the issue by using sync.

      I can't umount the device, because my application is showing fullscreen. So I can't operate the system. I think I can add a function to my software to umount the device.

      But I still wonder why doing the cp from a shell works even though I don't umount the device.

      JonBJ Online
      JonBJ Online
      JonB
      wrote on last edited by JonB
      #13

      @Qingshui-Kong

      Maybe you think it hard to believe that system("cp ...") does not work but doing the cp from a shell does....
      But it is true. I tested more then ten times for each methods. But I don't know the reason. Could you tell me that, if you know?

      But I still wonder why doing the cp from a shell works even though I don't umount the device.

      Sorry, but I simply do not believe that sitting in a shell and executing a cp will behave any differently than sitting a program and executing system("cp ...")! (Assuming same permissions etc.) The shell itself is a program, and when it executes /bin/cp for you it will be using code not dissimilar (in terms of behaviour) from going system("cp").

      You still did not put in the necessary error checking, and reading of stderr in case something appears there, when your code goes system("cp ...") with your arguments. So there is a chance that the cp you execute from your code is not doing what you think.

      As for why cp works for you at all: there is a chance it executes a fsync(2) for you on this particular file, though frankly I would be surprised if it did.

      jsulmJ 1 Reply Last reply
      0
      • JonBJ JonB

        @Qingshui-Kong

        Maybe you think it hard to believe that system("cp ...") does not work but doing the cp from a shell does....
        But it is true. I tested more then ten times for each methods. But I don't know the reason. Could you tell me that, if you know?

        But I still wonder why doing the cp from a shell works even though I don't umount the device.

        Sorry, but I simply do not believe that sitting in a shell and executing a cp will behave any differently than sitting a program and executing system("cp ...")! (Assuming same permissions etc.) The shell itself is a program, and when it executes /bin/cp for you it will be using code not dissimilar (in terms of behaviour) from going system("cp").

        You still did not put in the necessary error checking, and reading of stderr in case something appears there, when your code goes system("cp ...") with your arguments. So there is a chance that the cp you execute from your code is not doing what you think.

        As for why cp works for you at all: there is a chance it executes a fsync(2) for you on this particular file, though frankly I would be surprised if it did.

        jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on last edited by
        #14

        @JonB One another possibility for different behaviour: different environments in a terminal and when calling cp with system().

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        JonBJ 1 Reply Last reply
        0
        • jsulmJ jsulm

          @JonB One another possibility for different behaviour: different environments in a terminal and when calling cp with system().

          JonBJ Online
          JonBJ Online
          JonB
          wrote on last edited by JonB
          #15

          @jsulm
          Possibly true, but can you name anything in the environment which is going to make a command-line-invoked cp behave the slightest bit differently wrt syncing to a USB device? Because I can't :) Just in case, perhaps the OP should test running his app from the terminal instead of from Qt Creator if that's what he's currently doing...

          jsulmJ 1 Reply Last reply
          0
          • JonBJ JonB

            @jsulm
            Possibly true, but can you name anything in the environment which is going to make a command-line-invoked cp behave the slightest bit differently wrt syncing to a USB device? Because I can't :) Just in case, perhaps the OP should test running his app from the terminal instead of from Qt Creator if that's what he's currently doing...

            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #16

            @JonB I can't as well, this is simply something that could make a difference even if I can't say exactly what it could be.

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            0
            • SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on last edited by
              #17

              Hi,

              How are you handling the device ?
              Are you mounting manually ?
              Is your application responsible for that part too ?
              Do you have multiple devices and not writing on the same by accident ?

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              Q 1 Reply Last reply
              0
              • SGaistS SGaist

                Hi,

                How are you handling the device ?
                Are you mounting manually ?
                Is your application responsible for that part too ?
                Do you have multiple devices and not writing on the same by accident ?

                Q Offline
                Q Offline
                Qingshui Kong
                wrote on last edited by
                #18

                @SGaist As I said, I didn't mount or unmount manually.
                And I only have one ubuntu system and one USB disk.

                1 Reply Last reply
                0
                • Q Qingshui Kong

                  Hello everybody,

                  Could somebody give me some advis?

                  I want to copy file to U-storage. But the file on the destination directory is alway empty.

                  I hope somebody will help me to solve this problem this time.

                  Thanks in advance.

                  My enviroment:
                  Ubuntu 16.04
                  0_1547200457166_7ea4ce92-1f6a-4060-9f27-888da8ff92c4-image.png
                  0_1547200466241_470fe906-f7df-4a74-ac86-b120724d8f40-image.png

                  Q Offline
                  Q Offline
                  Qingshui Kong
                  wrote on last edited by
                  #19

                  @jsulm @mrjj @JonB @kshegunov @SGaist
                  Thank you all!
                  I think maybe I should learn more knowledge about Linux system.

                  JonBJ 1 Reply Last reply
                  0
                  • Q Qingshui Kong

                    @jsulm @mrjj @JonB @kshegunov @SGaist
                    Thank you all!
                    I think maybe I should learn more knowledge about Linux system.

                    JonBJ Online
                    JonBJ Online
                    JonB
                    wrote on last edited by
                    #20

                    @Qingshui-Kong
                    Yes and no! The question you are asking about the behaviour of a mounted USB drive, and seeming to need to either unmount or sync/fsync(), is actually a nasty area! I too would not be sure of behaviour, so it's very understandable that you are unsure :)

                    Q 1 Reply Last reply
                    0
                    • JonBJ JonB

                      @Qingshui-Kong
                      Yes and no! The question you are asking about the behaviour of a mounted USB drive, and seeming to need to either unmount or sync/fsync(), is actually a nasty area! I too would not be sure of behaviour, so it's very understandable that you are unsure :)

                      Q Offline
                      Q Offline
                      Qingshui Kong
                      wrote on last edited by
                      #21

                      @JonB
                      OK. Thank you! I use sync to solve the problem.

                      JonBJ 1 Reply Last reply
                      0
                      • Q Qingshui Kong

                        @JonB
                        OK. Thank you! I use sync to solve the problem.

                        JonBJ Online
                        JonBJ Online
                        JonB
                        wrote on last edited by
                        #22

                        @Qingshui-Kong
                        Yes, that seems OK. It forces the OS to flush the pending content to the USB file, without which your problem seems to occur, so it is understandable.

                        Running sync on its own asks the OS to flush all file systems, which technically you do not need. If you wish to improve on this, from a terminal run man sync to read its syntax. There you can see that if you specify the individual USB file path as an argument it will only sync/flush that file system, which is all you need.

                        Q 1 Reply Last reply
                        2
                        • JonBJ JonB

                          @Qingshui-Kong
                          Yes, that seems OK. It forces the OS to flush the pending content to the USB file, without which your problem seems to occur, so it is understandable.

                          Running sync on its own asks the OS to flush all file systems, which technically you do not need. If you wish to improve on this, from a terminal run man sync to read its syntax. There you can see that if you specify the individual USB file path as an argument it will only sync/flush that file system, which is all you need.

                          Q Offline
                          Q Offline
                          Qingshui Kong
                          wrote on last edited by
                          #23

                          @JonB OK. Thank you very much!

                          1 Reply Last reply
                          0

                          • Login

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt Extensions
                          • Unsolved