[lug] /dev/stderr

D. Stimits stimits at comcast.net
Mon Dec 11 21:50:17 MST 2006

Daniel Webb wrote:

>I know there's probably an easy answer for this, but I couldn't figure it out.
>Why does
>echo test >/dev/stderr
>print "test" on Dom0 but not on DomU in Xen?
>I finally figured out that
>echo test >&2 
>works on both (in bash).  What's the difference (other than that one works)?

I don't know anything about Xen...but there is a common theme which is 
historically because of the C roots of any UNIX type system. Files 
opened in C have a numeric file descriptor associated with them. There 
are four descriptors, numbered 0 through 3, which are reserved for 
standardized system interaction (part of POSIX I believe). 0 is standard 
input, 1 is standard output, 2 is standard error (non-buffered), and 3 
is standard log (buffered version of standard error).

If you go to /dev, especially on newer udev style systems, you'll find 
/dev/stderr is really a symbolic link pointing at /proc/self/fd/2. That 
corresponds to a login device context which is different for different 
logins, e.g., two people with two separate logins can both point at 
descriptor 2 without interference, it associates with the login. The 
syntax of the different shells essentially create different escape 
notation to indicate descriptors. With bash, it's c-like, such as 2>&1. 
With tcsh, it doesn't understand that syntax, and you have to use 
something like "command |& tee file.log" to log both standard and and 
standard error; other times it understands /dev/stderr by name, which 
could just as easily be pointed at another descriptor.

So...if Xen is different, it means that either you are using a different 
shell, or the descriptors are aliased in some other way (sadly, I've 
never used Xen). All of them are shortcuts to pointing at descriptor 0 
through 3. The /dev files themselves are all really kernel drivers and 
not really files, so perhaps the Xen kernel has a modified driver.

D. Stimits, stimits AT comcast DOT net

More information about the LUG mailing list