[Samba] checking a locked file
Matt Eaton
smb at divinehawk.com
Mon Jan 22 16:30:43 GMT 2007
I've been trying to determine if a file is locked by samba from unix. Is
there some magic incantation to find this? E.g. if someone is copying a file
in from a windows system via samba.
I'm using the default locking parameters on 3.0.10 with a 2.6 kernel. I've
tried checking posix byte ranges, posix locking, and kernel op locks.
Here is my test program:
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
/* kernel op locks */
#define F_GETLEASE 1025
int main(int argc, char **argv)
{
struct flock the_lock;
int f;
int retlck;
int smblck;
if(argc != 2) {
fprintf(stdout, "Usage: %s <file>\n", argv[0]);
return 1;
}
f = open(argv[1], O_RDONLY);
the_lock.l_type = F_WRLCK;
the_lock.l_whence = SEEK_SET;
the_lock.l_start = 0;
the_lock.l_len = 0;
if(f <= 0) {
fprintf(stderr, "Cannot open file: %s\n", argv[1]);
return 1;
}
fcntl(f, F_GETLK, &the_lock);
retlck = flock(f, LOCK_EX | LOCK_NB);
smblck = fcntl(f, F_GETLEASE, 0);
fprintf(stdout, "smblck: %x\n", smblck);
close(f);
if((the_lock.l_type == F_UNLCK) && (retlck == 0))
{
fprintf(stdout, "File is not locked\n");
}
else
{
fprintf(stdout, "File is locked\n");
return 1;
}
return 0;
}
More information about the samba
mailing list