在Linux中目录和文件有什么区别和联系?

软件和网站开发以及相关技术探讨
头像
小锐同学
帖子: 314
注册时间: 2009-08-14 16:24

在Linux中目录和文件有什么区别和联系?

#1

帖子 小锐同学 » 2010-01-23 17:19

我记得,就是。

opendir()用来读取目录,然后它就会返回一个DIR的指针。

但是又发现用于文件的open()函数也可以用来“open”dir,然后也会返回一个文件描述符。

一个目录也可以用文件描述符。。~~这个。。。那它跟文件有什么联系和区别呢?

迷惑中· :em06
我很乖的。。。
头像
liwangli
帖子: 262
注册时间: 2008-02-12 19:47

Re: 在Linux中目录和文件有什么区别和联系?

#2

帖子 liwangli » 2010-01-23 17:39

目录本来就是文件,只不过你觉得它是目录
头像
小锐同学
帖子: 314
注册时间: 2009-08-14 16:24

Re: 在Linux中目录和文件有什么区别和联系?

#3

帖子 小锐同学 » 2010-01-23 17:56

目录本来就是文件,那么。

它们有什么区别呢?

我只知道对一个目录具有可执行权限的话就是能列出目录里面的文件名单。对文件可执行那就是可执行。
我很乖的。。。
头像
wowoto
帖子: 3050
注册时间: 2009-04-11 12:17
系统: windows7

Re: 在Linux中目录和文件有什么区别和联系?

#4

帖子 wowoto » 2010-01-23 17:56

目录是“文件夹,文件”
例如:
[wowoto@Archlinux ~]$ file /home/
/home/: directory
文件是“文件”
例如:
[wowoto@Archlinux ~]$ file /home/wowoto/Desktop/@.tex
/home/wowoto/Desktop/@.tex: LaTeX 2e document text
[wowoto@Archlinux ~]$
wowoto>ubuntu8.04>ubuntu9.04>Archlinux>FreeBSD8.0>Archlinux & end here.
头像
小锐同学
帖子: 314
注册时间: 2009-08-14 16:24

Re: 在Linux中目录和文件有什么区别和联系?

#5

帖子 小锐同学 » 2010-01-24 8:07

对一个目录进行操作~
如下:

代码: 全选

lucifer@DearBaby:~/CC$ ls
CTrapsAndPitfalls  C和指针  forget  grep-2.5.4	header	knowledge  Unix
lucifer@DearBaby:~/CC$ cd Unix
lucifer@DearBaby:~/CC/Unix$ cd ..
lucifer@DearBaby:~/CC$ cat Unix
cat: Unix: Is a directory
lucifer@DearBaby:~/CC$ ls Unix
1-1.c	 1-3.c	3-1.c	4-2.c	4-6.c~	 apue.h~    stat.c
1-1.rar  1-4.c	3-2.c	4-3.c	4-7.c	 bar	    stevens.advprog.tar.Z
1-2.c	 1-5.c	3-2.c~	4-3.c~	4-7.c~	 file.hole  TestLseek.c
1-2.out  1-6.c	3-3.c	4-4.c	a.out	 foo
1-2try	 1-7.c	3-4.c	4-5.c	apue1.h  forget
1-2try1  1-8.c	4-1.c	4-6.c	apue.h	 lseek.c
lucifer@DearBaby:~/CC$ vim Unix
在最后我Vim了这个目录,然后我看到了这个。
Screenshot.png
vim显示的这个是什么来的?
怎么读?
我很乖的。。。
头像
小锐同学
帖子: 314
注册时间: 2009-08-14 16:24

Re: 在Linux中目录和文件有什么区别和联系?

#6

帖子 小锐同学 » 2010-01-24 8:27

我发现了,在这里vim被当作了一个资源管理器来用了。

但有个问题,就是。

在柱面组中,有i节点,目录快,数据块,那么,那个柱面组中的目录快是不是这里所说的“目录”?
我很乖的。。。
头像
adagio
论坛版主
帖子: 22110
注册时间: 2008-02-17 23:47
来自: 美丽富饶的那啥星球

Re: 在Linux中目录和文件有什么区别和联系?

#7

帖子 adagio » 2010-01-24 14:18

我觉得“目录”其实就是一个节点,或者说就是一个指向牌,就像分叉路口的指路牌一样,帮助你找到正确的地方(数据块)

想起当年学电脑的时侯,我的老师说——文件夹就是在硬盘上的一块存储文件的区域,汗!真是误人啊
明天就换大三八!
——8核CPU、8G内存、8T硬盘……
8卡交火,80寸大屏放8个……
IPv8的光纤要8条……

---------------------------------------------------------------------------------
[图片版]新手当自强(续)FAQ
[新手进阶]挂载、fstab、调整linux分区
[图片版]E17桌面环境配置手把手
dshbusiness
帖子: 1831
注册时间: 2009-04-03 15:10

Re: 在Linux中目录和文件有什么区别和联系?

#8

帖子 dshbusiness » 2010-01-25 0:59

目录也是一种文件,是DIR类型的描述符
例如
DIR *ptr;
ptr = opendir(path);

/* 大概是这么写吧,具体形式我忘了 */

至于能不能用open系统调用打开我没有做过实验,不清楚,不过就算能够打开也没有什么大惊小怪的。

linux目录的一般结构:

|超级块|i节点|数据区|

整块硬盘大概这么分区,具体则会有变化

实际上真正记录文件位置的是i节点块,i节点中记录了文件的属性信息,以及文件实际内容在数据区中的位置
数据区只负责记录文件的内容
超级块你不用管它

所谓目录,就是i节点中某一个条目指向的磁盘区域,这个区域中记录的是它所包含的文件和子目录的i节点编号……
所谓文件,就是i节点中某一个条目指向的磁盘区域,这个区域中记录的是文件的内容……

上面大概就是目录和文件的唯一区别了……只是记录的内容不一样而已,然后,由于在建立目录或者文件的时候,分配i节点时会在i节点内填入文件属性,这样就给用户表现出了目录和文件的区别……

呃……大概就是这个样子,不知道我解释的是否清楚
t3swing
帖子: 1028
注册时间: 2008-11-01 21:42
来自: 树下板凳

Re: 在Linux中目录和文件有什么区别和联系?

#9

帖子 t3swing » 2010-01-25 10:05

所谓目录,就是i节点中某一个条目指向的磁盘区域,这个区域中记录的是它所包含的文件和子目录的i节点编号……
所谓文件,就是i节点中某一个条目指向的磁盘区域,这个区域中记录的是文件的内容……
如8L所说,我觉得没有本质区别
目录和文件区别是他们stat属性来区分的(一组宏),stat属性包含了文件和目录的各种信息,但他们都可以用stat结构来描述,可以说没本质上的区别
民族的脊梁,是踏实做事的人,非只知道骂街的泼妇。
poet
帖子: 2841
注册时间: 2006-09-11 22:47

Re: 在Linux中目录和文件有什么区别和联系?

#10

帖子 poet » 2010-01-25 13:15

13025700481 写了:我记得,就是。
opendir()用来读取目录,然后它就会返回一个DIR的指针。
但是又发现用于文件的open()函数也可以用来“open”dir,然后也会返回一个文件描述符。
一个目录也可以用文件描述符。。~~这个。。。那它跟文件有什么联系和区别呢?
迷惑中· :em06
目录就是一个普通的文件,根据文件里面的内容可以解析出目录中的内容。

一副普通的图片文件,用 open() 也可以打开,但自己需要解析的函数才能够读取出具体的内容。

opendir() 其实也许就只是一个解析的接口而已。
头像
highwind
帖子: 1362
注册时间: 2008-09-05 23:31
系统: LinuxMint17

Re: 在Linux中目录和文件有什么区别和联系?

#11

帖子 highwind » 2010-01-25 17:07

看来机器和人就是难以交流哦。 :em04
头像
小锐同学
帖子: 314
注册时间: 2009-08-14 16:24

Re: 在Linux中目录和文件有什么区别和联系?

#12

帖子 小锐同学 » 2010-01-26 8:59

|超级块|i节点|数据区|
整块硬盘大概这么分区,具体则会有变化
by reading the book , i was told that....

磁盘里有很多分区。
每个分区里有自举块,超级块,柱面组。
每个柱面组里有超级块副本,配置信息,i节点图,块位图,i节点数组,数据块。
数据块里面又夹杂着一些目录块。
目录块里面记载的是i节点号和文件名。
i节点指向数据块。

well。。。~

输入完上面的东西之后, 发现个东西,目录块没有被东西指向。
我猜它或许就是我们看到的“目录”了。 :em05
(该死的,昨天停电了一天)
我很乖的。。。
头像
小锐同学
帖子: 314
注册时间: 2009-08-14 16:24

Re: 在Linux中目录和文件有什么区别和联系?

#13

帖子 小锐同学 » 2010-01-26 9:06

如果真是这样的话,我还是迷惑对于1楼的问题:

对于一个目录用open()函数。

10楼的思路貌似不错 :em11 ,我再想想~~`
我很乖的。。。
dshbusiness
帖子: 1831
注册时间: 2009-04-03 15:10

Re: 在Linux中目录和文件有什么区别和联系?

#14

帖子 dshbusiness » 2010-01-27 0:24

13025700481 写了:
|超级块|i节点|数据区|
整块硬盘大概这么分区,具体则会有变化
by reading the book , i was told that....

磁盘里有很多分区。
每个分区里有自举块,超级块,柱面组。
每个柱面组里有超级块副本,配置信息,i节点图,块位图,i节点数组,数据块。
数据块里面又夹杂着一些目录块。
目录块里面记载的是i节点号和文件名。
i节点指向数据块。

well。。。~

输入完上面的东西之后, 发现个东西,目录块没有被东西指向。
我猜它或许就是我们看到的“目录”了。 :em05
(该死的,昨天停电了一天)
呃……你给说复杂了……我说的是一个基本的抽象……你那个……是在这个基础的抽象上面加了许多东西……so……你看的书太复杂了……看本基本的书去……

目录块……是没有东西指向的……我记得是磁盘根目录的位置是放在一个特定的地方的,每当系统启动,就读这个地方,得到一个目录入口,然后又由于整个磁盘的目录是串成一棵树的,只要指导一个节点就可以找到所有的节点……

大概就是这样
dshbusiness
帖子: 1831
注册时间: 2009-04-03 15:10

Re: 在Linux中目录和文件有什么区别和联系?

#15

帖子 dshbusiness » 2010-01-27 0:25

另外十楼说的有道理……赞一个……
回复