Regarding Locking The File
-
No you cannot read while someone else has aquired the semaphore and is writing.
How about using "QReadWriteLock":http://developer.qt.nokia.com/doc/qt-4.7/qreadwritelock.html ?
I think its more intuitive to use. -
@Rajveer:
QReadWriteLock does not work across processes, so it is useless for this case.It is up to you to figure out if you want to allow reading while the file is being written to too. It depends on your application if that is a problem or not. You can look at QReadWriteLock to see what kind of problems you may expect though, and what kind of algorithm you could use.
By default, if you only use one semaphore for all file access, then both reading and writing block the file completely. You could implement something more intelligent than that based on using one or more semaphores though. QReadWriteLock can be an inspiration for that.
-
[quote author="KA51O" date="1309336526"]Too bad. Thanks for the reply anyways.
Is there maybe another way to deal with my problem in a more "professional" way? I cannot use any OS specific methods like 'fuser' or 'lsof'.[/quote]Why cannot you use those? You could implement a solution based on OS specific methods for each OS you support.
-
Hi Andre
Below is example code for Read & write
Read:
@
QFile myfile(filename);
if (myfile.open(QIODevice::ReadOnly | QIODevice::Text)) // Open the file
{
Reading code;
myfile.close();
}
@Write:
@
QFile myfile(filename);
if (myfile.open(QIODevice::WriteOnly)) // Open the file
{
writing code;
myfile.close();
}
@Andre can you please show me how to use the semaphore with above two codes.
-
[quote author="Rajveer" date="1309338534"]Hi KA51O
So if i take a WriteLock while writing to the file,so can any other process can read at that time.
[/quote]
Any other process that takes part in the (system) semaphore game will most probably not read the file. Any process which does not use a semaphore or mutex can happily read and write the file as long as it has the OS permission to do so.
You can not avoid that situation entirely, you have to rely on the good behavior of all parties joining the party.
-
[quote author="Andre" date="1309338341"]@Rajveer:
QReadWriteLock does not work across processes, so it is useless for this case. [/quote]
Thanks for the hint.I hadn't stumbled upon "QSystemSemaphore's":http://developer.qt.nokia.com/doc/qt-4.7/qsystemsemaphore.html up until now. Thanks for that hint too.