【发布时间】:2014-01-28 11:57:36
【问题描述】:
我一直在阅读 Brian Kernighan 和 Dennis Ritchie - The C Programming Language 和第 8.6 章是关于 UNIX OS 下的目录列表。他们说一切甚至目录都是一个文件。这意味着我应该能够将目录作为文件打开?我已经使用 stdio 函数尝试过它,但它没有用。现在,我正在尝试使用 UNIX 系统功能。当然,我用的不是 UNIX,我用的是 Ubuntu linux。这是我的代码:
#include <syscall.h>
#include <fcntl.h>
int main(int argn, char* argv[]) {
int fd;
if (argn!=1) fd=open(argv[1],O_RDONLY,0);
else fd=open(".",O_RDONLY,0);
if (fd==-1) return -1;
char buf[1024];
int n;
while ((n=read(fd,buf,1024))>0)
write(1,buf,n);
close (fd);
return 0;
}
即使 argn 为 1(无参数)并且我正在尝试读取当前目录,这也不会写入任何内容。 有什么想法/解释吗? :)
【问题讨论】:
-
最好使用
argc而不是argn- 通常使用它可以减少混淆。 -
Kernighan 和 Ritchie 确实断言一切都是文件。但是,本书稍后还指出
opendir、readdir和closedir旨在打开、读取和关闭Dirent结构,它基本上是目录“文件”的可移植描述。然而,文件系统在 unix 变体之间有所不同,这或许可以解释为什么系统坚持对目录使用这些特殊方法。 -
是的,我看到他们已经实现了 Dirent 结构,但他们是这样做的,所以很混乱。感谢您对文件系统的解释。
标签: c linux unix filesystems gnu