?? truncate.c
字號(hào):
/* passed* linux/fs/truncate.c** (C) 1991 Linus Torvalds*/#include <set_seg.h>
#include <linux/sched.h> // 調(diào)度程序頭文件,定義了任務(wù)結(jié)構(gòu)task_struct、初始任務(wù)0 的數(shù)據(jù),// 還有一些有關(guān)描述符參數(shù)設(shè)置和獲取的嵌入式匯編函數(shù)宏語句。#include <sys/stat.h> // 文件狀態(tài)頭文件。含有文件或文件系統(tǒng)狀態(tài)結(jié)構(gòu)stat{}和常量。//// 釋放一次間接塊。static void free_ind (int dev, int block){ struct buffer_head *bh; unsigned short *p; int i;// 如果邏輯塊號(hào)為0,則返回。 if (!block) return;// 讀取一次間接塊,并釋放其上表明使用的所有邏輯塊,然后釋放該一次間接塊的緩沖區(qū)。 if (bh = bread (dev, block)) { p = (unsigned short *) bh->b_data; // 指向數(shù)據(jù)緩沖區(qū)。 for (i = 0; i < 512; i++, p++) // 每個(gè)邏輯塊上可有512 個(gè)塊號(hào)。 if (*p) free_block (dev, *p); // 釋放指定的邏輯塊。 brelse (bh); // 釋放緩沖區(qū)。 }//其它字段//i_zone[0]//i_zone[1]//i_zone[2]//i_zone[3]//i_zone[4]//i_zone[5]//i_zone[6]//i 節(jié)點(diǎn)//直接塊號(hào)//一次間接塊//二次間接塊//的一級(jí)塊//二次間接塊//的二級(jí)塊//一次間接塊號(hào)//二次間接塊號(hào)//i_zone[7]//i_zone[8]// 釋放設(shè)備上的一次間接塊。 free_block (dev, block);}//// 釋放二次間接塊。static voidfree_dind (int dev, int block){ struct buffer_head *bh; unsigned short *p; int i;// 如果邏輯塊號(hào)為0,則返回。 if (!block) return;// 讀取二次間接塊的一級(jí)塊,并釋放其上表明使用的所有邏輯塊,然后釋放該一級(jí)塊的緩沖區(qū)。 if (bh = bread (dev, block)) { p = (unsigned short *) bh->b_data; // 指向數(shù)據(jù)緩沖區(qū)。 for (i = 0; i < 512; i++, p++) // 每個(gè)邏輯塊上可連接512 個(gè)二級(jí)塊。 if (*p) free_ind (dev, *p); // 釋放所有一次間接塊。 brelse (bh); // 釋放緩沖區(qū)。 }// 最后釋放設(shè)備上的二次間接塊。 free_block (dev, block);}//// 將節(jié)點(diǎn)對(duì)應(yīng)的文件長度截為0,并釋放占用的設(shè)備空間。voidtruncate (struct m_inode *inode){ int i;// 如果不是常規(guī)文件或者是目錄文件,則返回。 if (!(S_ISREG (inode->i_mode) || S_ISDIR (inode->i_mode))) return;// 釋放i 節(jié)點(diǎn)的7 個(gè)直接邏輯塊,并將這7 個(gè)邏輯塊項(xiàng)全置零。 for (i = 0; i < 7; i++) if (inode->i_zone[i]) { // 如果塊號(hào)不為0,則釋放之。 free_block (inode->i_dev, inode->i_zone[i]); inode->i_zone[i] = 0; } free_ind (inode->i_dev, inode->i_zone[7]); // 釋放一次間接塊。 free_dind (inode->i_dev, inode->i_zone[8]); // 釋放二次間接塊。 inode->i_zone[7] = inode->i_zone[8] = 0; // 邏輯塊項(xiàng)7、8 置零。 inode->i_size = 0; // 文件大小置零。 inode->i_dirt = 1; // 置節(jié)點(diǎn)已修改標(biāo)志。 inode->i_mtime = inode->i_ctime = CURRENT_TIME; // 重置文件和節(jié)點(diǎn)修改時(shí)間為當(dāng)前時(shí)間。}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -