Date: Fri, 8 Aug 1997 03:00:01 -0700 (PDT) From: tetsuya@secom-sis.co.jp (Tetsuya Furukawa) To: freebsd-bugs Subject: Re: kern/4243: file locking doesn't work for pipe Message-ID: <199708081000.DAA06716@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/4243; it has been noted by GNATS. From: tetsuya@secom-sis.co.jp (Tetsuya Furukawa) To: peter@spinner.dialix.com.au Cc: dg@root.com, FreeBSD-gnats-submit@FreeBSD.ORG Subject: Re: kern/4243: file locking doesn't work for pipe Date: Fri, 8 Aug 1997 18:58:53 +0900 Since I remembered the proper specification of flock(), I also think that flock() for a file descriptor shared among different processes is obviously useless. But fcntl() for a shared file descriptor may be useful because fcntl() has the other specification. In fact, the following program prints "fcntl works fine." on FreeBSD 2.2-STABLE i386. ---- #include <sys/file.h> #include <sys/errno.h> #include <errno.h> #include <stdio.h> #include <unistd.h> #include <fcntl.h> int main() { int fd; struct flock flbuf; char c; flbuf.l_start = 0; flbuf.l_len = 0; flbuf.l_type = F_WRLCK; flbuf.l_whence = SEEK_SET; fd = open("lockfile", O_WRONLY | O_CREAT, 0666); if (fork() == 0) { /* child */ fcntl(fd, F_SETLKW, &flbuf); sleep(2); exit(0); } /* parent */ sleep(1); if (fcntl(fd, F_SETLK, &flbuf) == -1) { if (errno == EAGAIN) printf("fcntl works fine.\n"); else printf("fcntl fails: %s\n", strerror(errno)); } else printf("fcntl is discarded.\n"); return 0; } ---- File locking for a pipe by fcntl() fails on FreeBSD. I think the priority of supporting it is low. To the developer of the Apache's module, I suggested to do fcntl() for a temporary file. -- Tetsuya FURUKAWA in Tokyo, Japan PGP Key fingerprint = C2 86 A6 7C 72 A0 A1 94 F4 4C 83 9D D1 E3 47 BD
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199708081000.DAA06716>