delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2000/08/06/10:42:10

Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT sources DOT redhat DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT sources DOT redhat DOT com>
List-Help: <mailto:cygwin-help AT sources DOT redhat DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner AT sources DOT redhat DOT com
Delivered-To: mailing list cygwin AT sources DOT redhat DOT com
From: "Eric Z. Ayers" <eric DOT ayers AT mindspring DOT com>
MIME-Version: 1.0
Message-ID: <14733.31288.793222.825050@localhost.localdomain>
Date: Sun, 6 Aug 2000 10:46:16 -0400 (EDT)
To: cygwin AT sources DOT redhat DOT com
Subject: fcntl() problem - write() returns 13
X-Mailer: VM 6.71 under 21.1 (patch 4) "Arches" XEmacs Lucid
Reply-To: Eric DOT Ayers AT mindspring DOT com

Hello All, 
 
I'm a new user to Cygwin.  Although I have a lot of experience in C 
coding under UNIX, I've not developed on NT before.  I've spent the 
past hour or so researching this issue by reading the FAQ, API notes 
and the archives, but haven't found an answer, so I'm posting. 
 
We were scratching our heads to figure out why a write() call was 
failing and setting errno to 13 (permission denied). 
 
Apparently, some preceeding calls to 'fcntl' are  
causing an NT error on trying to write to the file.  The real error is 
 
"LOCK_VIOLATION" which cygwin translates into 13 (permission denied)  
because I guess that was the closest thing...  
  
strace cgisam_add_del_test.exe -create -file=/tmp/ixfile_eza  
  
...  
  
442  282687 [main] cgisam_add_del_test 1097 statfs: statfs D:\  
647  283334 [main] cgisam_add_del_test 1097 _fcntl: 0 = fcntl (3, 8, 0)      
 
  **This is a fcntl (F_SETLK for a 1 byte read-only lock at byte 1) 
 
212  283546 [main] cgisam_add_del_test 1097 _fcntl: 0 = fcntl (3, 9, 0)    
 
  **This is a fcntl (F_SETLK for a 1 byte write lock at byte 9) 
 
192  283927 [main] cgisam_add_del_test 1097 fhandler_base::lseek: lseek (/tmp/i\
xfile_eza.\ixd, 0, 0) 
195  284\122 [main] cgisam_add_del_test 1097 _lseek: 0 = lseek (3, 0, 0)  
186  28\4308 [main] cgisam_add_del_test 1097 _write: write (3, 0xA031860, 1024) 
 
  ** This is writing a 1K block at the start of the file 
 
216  \284524 [main] cgisam_add_del_test 1097 /src/winsup/fhandler.cc:272 seterr\
no: 3\3 (LOCK_VIOLATION) -> 13                              
190  284714 [main] cgisam_add_del_test  
1097 _write: -1 = write (3, 0xA031860,    1024)       
 
It appears that locks  set with fcntl() have some different behavior 
under Cygwin than under UNIX.  Apparently, they are mandatory.  It 
seems that we have taken advantage of the  fact that locks under UNIX 
are advisory only.  We're not using these locks to lock the parts of 
the file we're interested in.   
 
I noticed that there is nothing about file locking in the 'TODO' 
list, but the API doc says that F_GETLK isn't implemented (darn, we 
use that too.)  I'm assuming that if this were something easy to do 
you would have already done it... :-) 

Thanks for reading all of the above.  If this is not a bug, then, here 
are my questions:  
 
  Are there any plans to make file locks advisory instead of mandatory? 
  Are there any plans to implement F_GETLK as an option to fcntl()? 
 
Regards, 
-Eric. 
-- 
Eric Z. Ayers                                           Phone: +1 404-705-2864 
Computer Generation Incorporated                          FAX: +1 404-705-2805 
Building G, 4th Floor, 5775 Peachtree-Dunwoody Rd., Atlanta, GA 30342   USA 
eric AT compgen DOT com   

--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019