Gordon Beaton wrote On 10/25/07 09:37,:
On Thu, 25 Oct 2007 09:26:55 -0400, Eric Sosman wrote:
On at least some versions of Windows, certain filenames
are valid but surprising. Try using the file name "con.txt"
and see what happens (on my XP box, "type con.anything" echoes
what's typed at the keyboard).
The same is true of "cat /dev/stdin" on Linux, and the technique is
actually pretty useful for getting a program that requires a filename
to read from stdin or print to stdout.
Perhaps I wasn't clear enough. The surprising thing
isn't that devices have names in the file system, but that
Windows "imports" those names to every directory, and also
gives them an unlimited number of aliases in every directory.
"cat /dev/stdin.dat" will tell you it can't find any such
file, while "type con.dat" and "type con.foobar" will both
go straight to the CON: device.
I had to deal with this once, at a PPOE. Users could
give their documents whatever names they liked, and could
even have multiple identically-named documents in the same
directory. Behind the scenes, the product constructed file
names by "mangling" the user-provided names and attaching
various extensions and disambiguating goodies. When we did
our first Windows port, somebody created a pair of short
documents describing the arguments for and against something,
and assigned them the names "pro" and "con". These name
stems passed through our mangler largely unchanged, yielding
file names like "PRO.DOC" and "PRO.DC@" -- and I was the
guy who fielded the bug report that resulted when we tried
to store data in "CON.DOC" and "CON.DC@" ...
Wow, talk about namespace clutter. You can't even use relative or
absolute paths. Stupid M$.