Regarding Locking The File
-
Hi All
I have created a DLL in QT which contains two functions.
1.)Read File
2.)Write FileThis DLL is used by more than 1 application.
So the problem Iam facing is all applications are trying to write file at same time.
So is there any way by which we can lock or allow one application at a time to write or read.Give Sample Code.
Regards
Indrajeet -
"QSystemSemaphore":http://doc.qt.nokia.com/4.7-snapshot/qsystemsemaphore.html
-
I guess you find the answer in this sequence of text taken from the detailed description
[quote author="cincirin" date="1308812979"]"QSystemSemaphore":http://doc.qt.nokia.com/4.7-snapshot/qsystemsemaphore.html[/quote]:
"A semaphore is a generalization of a mutex. While a mutex can be locked only once, a semaphore can be acquired multiple times. Typically, a semaphore is used to protect a certain number of identical resources.
Like its lighter counterpart QSemaphore, a QSystemSemaphore can be accessed from multiple threads. Unlike QSemaphore, a QSystemSemaphore can also be accessed from multiple processes. This means QSystemSemaphore is a much heavier class, so if your application doesn't need to access your semaphores across multiple processes, you will probably want to use QSemaphore."QMutex is more light-weight. It is used for synchronization between different threads.
-
[quote author="Indrajeet" date="1308819271"]
2 Apps running on 2 different machines access same file located at some location.
[/quote]the following recommendation is then the method.
[quote author="loladiro" date="1308819457"]You could place a lock file somewhere, where both machines can access it.[/quote]However, I doubt that Qt will have something for you. Probably, you have to make the mechanism your self. Is the access from different machines on a frequent basis? If not, you may use a simple technique such as an additional file indicating taht the main file is locked. But it looks like a lot of traps.
-
You don't have to exchange data between more processes. Just use "aquire":http://doc.qt.nokia.com/4.7-snapshot/qsystemsemaphore.html#acquire to lock some memory block and "release":http://doc.qt.nokia.com/4.7-snapshot/qsystemsemaphore.html#release to unlock that memory block.
-
[quote author="cincirin" date="1308821592"]You don't have to exchange data between more processes. Just use "aquire":http://doc.qt.nokia.com/4.7-snapshot/qsystemsemaphore.html#acquire to lock some memory block and "release":http://doc.qt.nokia.com/4.7-snapshot/qsystemsemaphore.html#release to unlock that memory block. [/quote]
What's the help?
The idea is to share a file somewhere. Two applications are acessing the file, but since the applications are not hosted on the same machine, they do not share memory. -
bq. What's the help?
The idea is to share a file somewhere. Two applications are acessing the file, but since the applications are not hosted on the same machine, they do not share memory. [/quote]Sorry, I did not see: "2 Apps running on 2 different machines"
In first post @Indrajeet not mention this situation. -
What about "setPermissions":http://doc.qt.nokia.com/latest/qfile.html#setPermissions ? You can set QFile::ReadOwner | QFile::WriteOwner permission when you have access and QFile::ReadOther | QFile::WriteOther when you finish to read / write.
-
Hi All
I have created a DLL in QT which contains two functions.
1.)Read File
2.)Write FileThis DLL is used by more than 1 application on same PC.Read & Write will be performed on same file kept at some shared location.
So the problem Iam facing is all applications are trying to write file at same time.
So is there any way by which we can give access to only one at a time to write to the file.
so once he complete writing the other can writeGive Sample Code.
-
The fact that the function is in a dll is irrelevant. Are the applications that are in contention running on the same machine or separate machines? You hav said both so far.
If they are ont he same machine you can use QSystemSemaphore or a lock file type mechanism.
If they are on separate machines and the shared file is on some kidn of network drive then you will most likely be best using a lock file.
-
You are changing stories.
Yesterday you wrote (emphasis by me):
[quote author="Indrajeet" date="1308819271"]Hi
I dont want to exchange the data between 2 processes.
2 Apps running on 2 different machines access same file located at some location.
[/quote]Some 20 hours later it is (emphasis by me):
[quote author="Indrajeet" date="1308898293"]
This DLL is used by more than 1 application on same PC. Read & Write will be performed on same file kept at some shared location.
[/quote]Which one is the right one?