On Mon, 9 Mar 2009, Timothy Redaelli wrote:
Why can't I do a lockf on a file descriptor that does not point a real file
(such as stderr, stdout, or a character device)?
Since it works under NetBSD, Linux, Solaris. For portability between systems
I hope I can do it under FreeBSD.
The following code is simple, but It reproduce the problem. Under
non-FreeBSD systems, It will block before the puts. Instead under FreeBSD
the lockf calls return error and, so, the lock does not works.
Could you file a PR for this, with pretty much this e-mail and sample code
included? There's no real reason not for it to work other than that it is
likely not implemented for devfs; that should be easy to fix it but opening a
PR will help us keep track of the fact that it wants to be fixed.
thanks,
Robert N M Watson
Computer Laboratory
University of Cambridge
Any suggest?
<snip>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char tmp[256];
if (lockf(2, F_LOCK, 0) == -1)
perror("lock");
snprintf (tmp, 256, "%s XXX", argv[0]);
if (!argv[1] || strcmp(argv[1], "XXX"))
system(tmp);
puts("You should see it only after ctrl+c");
return EXIT_SUCCESS;
}
<end snip>
--
Timothy Redaelli
IT Consultant
Email: [email protected]
Mobile: +39 (338) 1187273
WWW: http://www.redaelli.eu/
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[email protected]"
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[email protected]"