FS utils treates directories as files?
Thomas Backman
serenity at exscape.org
Tue Jun 9 09:19:05 UTC 2009
On Jun 9, 2009, at 11:03 AM, Ivan Voras wrote:
> Thomas Backman wrote:
>> FreeBSD 8.0-CURRENT r193521 (Jun 5), bash:
>> [root at chaos /usr/ports]# file /
>> /: directory
>> [root at chaos /usr/ports]# cat /
>> �g��=[root at chaos /usr/ports]#
>> [root at 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?
Regards,
Thomas
More information about the freebsd-current
mailing list