First, I'd like to thank a lot to Glynn for the useful hints.... For the ones that are like me trying to lock local files, this works with me: #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <errno.h> #define YES 1 #define NO 0 #define TIMES 100000 #define TEXT "Prog1\n" main (void) { int fd; long int i; char *str2w=TEXT; int done; int flags_create=O_WRONLY | O_EXCL | O_CREAT; int flags_open=O_WRONLY | O_EXCL; int flags; done=NO; printf("Start.\n"); flags=flags_open; while (!done) { printf("Attempt Opening.\n"); fd = open("TEST", flags, 0777); printf("FD=%d\n",fd); if (fd > 0) { if (flock(fd, LOCK_EX) < 0) { /* this should not happen */ printf("Not locked, will close the file and do open again.\n"); close(fd); } else { printf("Writing to LOCKED! file\n"); printf("Jump to the end.\n"); lseek(fd,0L,SEEK_END); for(i=0; i<TIMES; i++) write(fd,str2w,strlen(str2w)); close(fd); done=YES; printf("Done.\n"); } } else { printf("Errno=%d\n",errno); if (errno==ENOENT) { flags=flags_create; printf("File doesnot exist, attempt to create in the next turn.\n"); } else { flags=flags_open; printf("File already exist but could not open it, might be locked.\n"); sleep(1); } } } } This was prog1.c, I made also prog2.c with TEXT "Prog2\n" and attempt to run them concurently from 2 consoles.... and examine TEST file... Just one small question... Do I need to flock() even if it is O_EXCL ? Regards and thanks, Ljubisa Gavrilovic <[EMAIL PROTECTED]>
Locked in file locking... tried,failed,rethink,success!!
Ljubisa Gavrilovic (Traserman International Ltd) Mon, 25 Jan 1999 11:28:28 -0500
- Re: Locked in file lockin... Ljubisa Gavrilovic (Traserman International Ltd)
- Re: Locked in file l... Glynn Clements