Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Mar 2009 23:35:58 +0000 (GMT)
From:      Robert Watson <rwatson@FreeBSD.org>
To:        Timothy Redaelli <timothy@redaelli.eu>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: lockf: Invalid argument on pipe
Message-ID:  <alpine.BSF.2.00.0903092335060.92752@fledge.watson.org>
In-Reply-To: <ac9bf7980903091448w1c3b8405la2a0084e5a947a05@mail.gmail.com>
References:  <ac9bf7980903091448w1c3b8405la2a0084e5a947a05@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

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: timothy@redaelli.eu
> Mobile: +39 (338) 1187273
> WWW:  http://www.redaelli.eu/
> _______________________________________________
> freebsd-hackers@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.BSF.2.00.0903092335060.92752>