> Hi,
> 
> I am trying to lock a file ( using jni and fcntl( ) ) from java on Linux, and
> i am not able to do it.
> 
> When I write pure C++ code to achieve the same functionality, the locking
> happens fine - ie, when i run the  program it locks the file, and when I run
> the same instance of the program again ( when the file is already locked and
> one instance of the program is already running ), the program returns as
> expected, bcos the file is already locked.
> 
> When I write a JNI wrapper ( at the end of this mail ) around this C++ code,
> and run the program in java - the first instance locks the file successfully;
> however the 2nd instance does not return!! ( It seems to be blocking waiting
> for the lock to be released !)
> 
> Can someone tell me how to make the 2nd instance return without blocking ??
> 
> Thanks in advance,
> 
> Nandakumar.
> 
> 
> JNIEXPORT jint JNICALL Java_Lock_LockFile(JNIEnv *env, jobject obj, jstring
> filename) {
>         int fd;
>         const char *file_name ;
> 
>         struct flock lock_it;
> 
>         lock_it.l_start = 0;            /* -"- */
>         lock_it.l_whence = 0;           /* from current point */
>         lock_it.l_len = 0;              /* until end of file */
>         lock_it.l_type = F_WRLCK;       /* set exclusive/write lock */
>         lock_it.l_pid = 0;              /* pid not actually interesting */
> 
>         file_name = env->GetStringUTFChars(filename,0);
> 
>         if((fd = open(file_name,O_WRONLY))<0)
>         {
>                 cout<<"Cannot open the file "<<"["<<errno<<"]"<<endl;
>                 return -1;
>         }
> 
>                 cout<<"opened the file " << file_name <<endl;
> 
>         if (fcntl(fd,F_SETLK, &lock_it)<0)
>         {
>                 cout<<"Cannot Lock the file"<<"["<<errno<<"]"<<endl;
>                 return -1;
>         }
>                 cout<<"locked the file " << file_name <<endl;
>         return 1;
> 
> }


----------------------------------------------------------------------
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to