Date: Tue, 09 Jun 2009 12:12:09 +0200 From: Hendrik Hasenbein <hhasenbe@techfak.uni-bielefeld.de> To: Thomas Backman <serenity@exscape.org> Cc: freebsd-current@freebsd.org, Ivan Voras <ivoras@freebsd.org> Subject: Re: FS utils treates directories as files? Message-ID: <4A2E3579.20105@techfak.uni-bielefeld.de> In-Reply-To: <60F36765-E4FA-4A2D-AD6B-E7881537F6DA@exscape.org> References: <B7437F9F-A8BF-4F49-AAE4-9B93B62B6223@exscape.org> <h0l8gb$57r$1@ger.gmane.org> <60F36765-E4FA-4A2D-AD6B-E7881537F6DA@exscape.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Thomas Backman wrote: > > On Jun 9, 2009, at 11:03 AM, Ivan Voras wrote: > >> Thomas Backman wrote: >>> FreeBSD 8.0-CURRENT r193521 (Jun 5), bash: >>> [root@chaos /usr/ports]# file / >>> /: directory >>> [root@chaos /usr/ports]# cat / >>> �g��=[root@chaos /usr/ports]# >>> [root@chaos /usr/ports]# cat /usr/ports/mail >>> � >> >> This is the traditional behaviour because yes, directories are just >> simply ordinary files with a special bit set to distinguish them. Other >> systems might have modified "cat" to check if directories are files but >> it's not standard. >> >> You can easily check this yourself. The following small program should >> work on every unix-ish system: >> >> #include <stdio.h> >> #include <stdlib.h> >> #include <sys/fcntl.h> >> >> int main() { >> int fd, i; >> char buf[512]; >> >> fd = open(".", O_RDONLY); >> read(fd, buf, 512); >> for (i = 0; i < 512; i++) >> printf("%4d ", buf[i]); >> } > > Yes, I realize that, and actually added a stat() call to cat to check > for directories... before I realized it was true for other utils as well. > I still think it's weird, though, and that the utils should check (as > long as they return gibberish; less /etc on my GNU/Linux system actually > shows a readable list of files - it seems as if less /etc == ls -al /etc > | less). Is there *any* use for this behaviour, or is it simply there > because nobody has added a check? In rare cases you might want to look at the real content of the directory file. Unix is all about having the choice. The linux variant should give a hint of the form 'This file is a directory. Do you want to 'ls -la | less' instead? Like it does for 8bit content. It isn't a GNU/linux feature. It depends on the distribution. Try a slackware or a debian (debian does it sun style, but more /etc != less /etc). They all handle it different. So you better don't use these features if you want to retain portability. (Example don't use #!/bin/sh and use bash features. It works on many systems, but not all.) Hendrik
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4A2E3579.20105>