Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 24 Oct 2004 18:49:22 +0100 (BST)
From:      Robert Watson <rwatson@freebsd.org>
To:        Stephen Montgomery-Smith <stephen@math.missouri.edu>
Cc:        freebsd-stable@freebsd.org
Subject:   Re: /dev/fd/3
Message-ID:  <Pine.NEB.3.96L.1041024184649.85623G-100000@fledge.watson.org>
In-Reply-To: <417BE400.8090506@math.missouri.edu>

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

On Sun, 24 Oct 2004, Stephen Montgomery-Smith wrote:

> I have a program that needs to write to file descriptor 3 via /dev/fd/3. 
>   But FreeBSD-5.3 doesn't let me do that, since only fd/0-2 exist.  How
> do I do this?  "man fd" didn't help me. 

By default, /dev/fd is services by devfs, and is initialized by
fildesc_drvinit() in kern_descrip.c.  It creates a hard-coded three
entries:

        dev = make_dev(&fildesc_cdevsw, 0, UID_ROOT, GID_WHEEL, 0666, "fd/0");
        make_dev_alias(dev, "stdin");
        dev = make_dev(&fildesc_cdevsw, 1, UID_ROOT, GID_WHEEL, 0666, "fd/1");
        make_dev_alias(dev, "stdout");
        dev = make_dev(&fildesc_cdevsw, 2, UID_ROOT, GID_WHEEL, 0666, "fd/2");
        make_dev_alias(dev, "stderr");

You can mount fdescfs on top of /dev/fd using the following command as
root:

    mount -t fdescfs fdescfs /dev/fd

This will cause the number of entries in /dev/fd to correspond to the
number of file descriptors the current process has open.  I'm not sure if
there are caveats associated with that approach, but from a simple
experiment here it appears to work.

Robert N M Watson             FreeBSD Core Team, TrustedBSD Projects
robert@fledge.watson.org      Principal Research Scientist, McAfee Research



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.NEB.3.96L.1041024184649.85623G-100000>