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, ThomasReceived on Tue Jun 09 2009 - 07:19:04 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:49 UTC