亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3757 | 回復(fù): 0
打印 上一主題 下一主題

Unix文件系統(tǒng)研究、二 目錄結(jié)構(gòu) [復(fù)制鏈接]

論壇徽章:
1
15-16賽季CBA聯(lián)賽之北控
日期:2022-03-04 22:35:50
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2008-03-29 10:43 |只看該作者 |倒序?yàn)g覽

關(guān)鍵詞:ScoUnix 文件系統(tǒng) 目錄結(jié)構(gòu)

    上文說了i節(jié)點(diǎn)的結(jié)構(gòu),其中重要的一點(diǎn)就是i節(jié)點(diǎn)結(jié)構(gòu)不含文件名信息,那對(duì)于一個(gè)具體的文件來說,文件名稱是怎么跟其i節(jié)點(diǎn)掛接上的呢?
    答案就是目錄,文件名跟i節(jié)點(diǎn)掛接是通過目錄來實(shí)現(xiàn)的,廢話不說,先show下目錄文件的結(jié)構(gòu)。

具體參考:/usr/include/sys/dirent.h (scounix505)
struct dirent {
ino32_t d_ino;                  /* 文件i節(jié)點(diǎn)*/
off_t   d_off;                  /* 目錄文件開頭至此目錄進(jìn)入點(diǎn)的位移*/
unsigned short  d_reclen;       /* 文件名長(zhǎng)度*/
char    d_name[1];              /* 文件名,這里有點(diǎn)怪,注意是數(shù)字1,具體容后再述*/
};

目錄本身也是一個(gè)文件,其文件內(nèi)容就是上述這么一個(gè)結(jié)構(gòu)表,上面的結(jié)構(gòu),有一點(diǎn)需要先解釋下,注意d_name定義是長(zhǎng)度1(注意是數(shù)字1,不是字母L)。
為什么是1呢?大家都知道字符串是\0結(jié)尾的,豈不是文件名任何時(shí)候都會(huì)溢出?
當(dāng)初unix設(shè)計(jì)者如此定義的原因我也沒找到,但是有一點(diǎn)是確定的,c語言是不檢查數(shù)組邊界的,d_name即使溢出也是沒問題,我想這就是d_reclen存在的理由吧,而且這樣有兩個(gè)好處:一是文件名長(zhǎng)度沒有限制;二是空間沒有浪費(fèi)(ps:以上有猜想成分,盼高手指正,在某些linux系統(tǒng)中,dirent定義是char d_name[NAMEMAXLEN+1])。


上面的結(jié)構(gòu)還說明以下幾個(gè)問題:
1、目錄包含文件;
專業(yè)的說法,文件名是文件i節(jié)點(diǎn)的鏈接。所以一個(gè)文件可以有多個(gè)鏈接,即多個(gè)文件名指向同一個(gè)文件,專業(yè)術(shù)語是多重鏈接,這就是所謂的硬鏈接(這里引申出來一個(gè)符號(hào)鏈接與硬鏈接的區(qū)別,下次再說)。

2、目錄包含子目錄;
道理跟目錄包含文件一樣,目錄的i節(jié)點(diǎn)跟文件的i節(jié)點(diǎn)區(qū)別在于各自的i節(jié)點(diǎn),i節(jié)點(diǎn)結(jié)構(gòu)第一個(gè)字段就描述了文件類型,這個(gè)在文一已經(jīng)說明。

3、目錄節(jié)點(diǎn)都含有.與..這兩個(gè)特殊文件,.代表自身,..代表上級(jí)目錄,可以對(duì)比i節(jié)點(diǎn)看出來。



另外附上一個(gè)小程序,可以驗(yàn)證以上說法:

#include
#include
#include
main()
{
DIR * dir;
struct dirent * ptr;
int i;
dir =opendir("/etc/rc.d");
while((ptr = readdir(dir))!=NULL)
{
  printf("[d_name:%12s] [d_ino:%8ld] [off_t:%4ld] [d_reclen:%4ld]\n",ptr->d_name,ptr->d_ino,ptr->d_off,ptr->d_reclen);
}
closedir(dir);
}

編譯方法:cc exam.c -o exam
執(zhí)行exam結(jié)果如下:
[d_name:           .] [d_ino:   30482] [off_t:  12] [d_reclen:  12]
[d_name:          ..] [d_ino:      23] [off_t:  24] [d_reclen:  16]
[d_name:      README] [d_ino:   30483] [off_t:  40] [d_reclen:  20]
[d_name:           0] [d_ino:   30484] [off_t:  52] [d_reclen:  12]
[d_name:           1] [d_ino:   30486] [off_t:  64] [d_reclen:  12]
[d_name:           2] [d_ino:   30488] [off_t:  76] [d_reclen:  12]
[d_name:           3] [d_ino:   30490] [off_t:  88] [d_reclen:  12]
[d_name:           4] [d_ino:   30492] [off_t: 100] [d_reclen:  12]
[d_name:           5] [d_ino:   30494] [off_t: 112] [d_reclen:  12]
[d_name:           7] [d_ino:   30496] [off_t: 124] [d_reclen:  12]
[d_name:           8] [d_ino:   30498] [off_t: 136] [d_reclen:  12]
[d_name:           9] [d_ino:   30500] [off_t: 148] [d_reclen:  12]
[d_name:           6] [d_ino:   34571] [off_t: 512] [d_reclen:  12]
對(duì)比執(zhí)行:l -ia(加i參數(shù)就顯示i節(jié)點(diǎn)),執(zhí)行結(jié)果如下:
total 42
30482 drwxrwxr-x  12 root     sys          512 Jun 27  2002 .
   23 drwxrwxr-x  26 bin      auth        7680 Jul  4 13:21 ..
26927 -rw-r--r--   1 bin      bin         1954 Jun 27  2002 README@
30484 drwxr-xr-x   2 root     sys          512 Jun 27  2002 0
30486 drwxr-xr-x   2 root     sys          512 Jun 27  2002 1
30488 drwxr-xr-x   2 root     sys          512 Jun 27  2002 2
30490 drwxr-xr-x   2 root     sys          512 Jun 27  2002 3
30492 drwxr-xr-x   2 root     sys          512 Jun 27  2002 4
30494 drwxr-xr-x   2 root     sys          512 Jun 27  2002 5
34571 drwxr-xr-x   2 root     sys          512 Jun 27  2002 6
30496 drwxr-xr-x   2 root     sys          512 Jun 27  2002 7
30498 drwxr-xr-x   2 root     sys          512 Jun 27  2002 8
30500 drwxr-xr-x   2 root     sys          512 Jun 27  2002 9


本文來自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u/31/showart_511185.html
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP