truncate.c ( File view )
Description:linux 0.11 kernel source code, with English Notes, so that learning good things linux kernel...
- By 2010-08-31
- View(s):24
- Download(s):2
- Point(s): 1
/* * linux/fs/truncate.c * * (C) 1991 Linus Torvalds */ #include <linux/sched.h> // 调度程序头文件,定义了任务结构task_struct、初始任务0 的数据, // 还有一些有关描述符参数设置和获取的嵌入式汇编函数宏语句。 #include <sys/stat.h> // 文件状态头文件。含有文件或文件系统状态结构stat{ }和常量。 //// 释放一次间接块。 static void free_ind (int dev, int block) { struct buffer_head *bh; unsigned short *p; int i; // 如果逻辑块号为0,则返回。 if (!block) return; // 读取一次间接块,并释放其上表明使用的所有逻辑块,然后释放该一次间接块的缓冲区。 if (bh = bread (dev, block)) { p = (unsigned short *) bh->b_data; // 指向数据缓冲区。 for (i = 0; i < 512; i++, p++) // 每个逻辑块上可有512 个块号。 if (*p) free_block (dev, *p); // 释放指定的逻辑块。 brelse (bh); // 释放缓冲区。 } //其它字段 //i_zone[0] //i_zone[1] //i_zone[2] //i_zone[3] //i_zone[4] //i_zone[5] //i_zone[6] //i 节点 //直接块号 //一次间接块 //二次间接块 //的一级块 //二次间接块 //的二级块 //一次间接块号 //二次间接块号 //i_zone[7] //i_zone[8] // 释放设备上的一次间接块。 free_block (dev, block); } //// 释放二次间接块。 static void free_dind (int dev, int block) { struct buffer_head *bh; unsigned short *p; int i; // 如果逻辑块号为0,则返回。 if (!block) return; // 读取二次间接块的一级块,并释放其上表明使用的所有逻辑块,然后释放该一级块的缓冲区。 if (bh = bread (dev, block)) { p = (unsigned short *) bh->b_data; // 指向数据缓冲区。 for (i = 0; i < 512; i++, p++) // 每个逻辑块上可连接512 个二级块。 if (*p) free_ind (dev, *p); // 释放所有一次间接块。 brelse (bh); // 释放缓冲区。 } // 最后释放设备上的二次间接块。 free_block (dev, block); } //// 将节点对应的文件长度截为0,并释放占用的设备空间。 void truncate (struct m_inode *inode) { int i; // 如果不是常规文件或者是目录文件,则返回。 if (!(S_ISREG (inode->i_mode) || S_ISDIR (inode->i_mode))) return; // 释放i 节点的7 个直接逻辑块,并将这7 个逻辑块项全置零。 for (i = 0; i < 7; i++) if (inode->i_zone[i]) { // 如果块号不为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; // 逻辑块项7、8 置零。 inode->i_size = 0; // 文件大小置零。 inode->i_dirt = 1; // 置节点已修改标志。 inode->i_mtime = inode->i_ctime = CURRENT_TIME; // 重置文件和节点修改时间为当前时间。 }
...
Expand> <Close
Sponsored links
File list
Tips: You can preview the content of files by clicking file names^_^Name | Size | Date |
---|---|---|
linux | 0.00 B | 0% 04-10-07 |
<boot> | 0.00 B | 04-10-07 15:01 |
bootsect.s | 12.49 kB | 08-01-04 21:38 |
head.s | 13.22 kB | 08-01-04 21:38 |
setup.s | 12.42 kB | 08-01-04 21:38 |
<fs> | 0.00 B | 04-10-07 15:01 |
bitmap.c | 8.46 kB | 02-09-04 13:12 |
block_dev.c | 3.95 kB | 02-09-04 13:12 |
buffer.c | 17.71 kB | 02-09-04 13:12 |
char_dev.c | 4.09 kB | 02-09-04 13:12 |
exec.c | 18.90 kB | 02-09-04 13:12 |
fcntl.c | 3.33 kB | 02-09-04 13:12 |
file_dev.c | 4.82 kB | 02-09-04 13:12 |
file_table.c | 209.00 B | 02-09-04 13:12 |
inode.c | 14.92 kB | 02-09-04 13:12 |
ioctl.c | 1.94 kB | 02-09-04 13:12 |
Makefile | 6.80 kB | 08-01-04 21:45 |
namei.c | 37.20 kB | 02-09-04 13:12 |
open.c | 10.00 kB | 02-09-04 13:12 |
pipe.c | 5.42 kB | 02-09-04 13:12 |
read_write.c | 5.86 kB | 02-09-04 13:12 |
stat.c | 2.69 kB | 02-09-04 13:12 |
super.c | 13.57 kB | 02-09-04 13:12 |
truncate.c | 2.46 kB | 02-09-04 13:12 |
<include> | 0.00 B | 04-10-07 15:01 |
a.out.h | 8.22 kB | 02-09-04 13:14 |
<asm> | 0.00 B | 04-10-07 15:01 |
io.h | 772.00 B | 02-09-04 13:14 |
memory.h | 1.03 kB | 08-01-04 22:13 |
segment.h | 2.50 kB | 02-09-04 13:14 |
system.h | 4.08 kB | 02-09-04 13:14 |
const.h | 589.00 B | 02-09-04 13:14 |
ctype.h | 1.68 kB | 02-09-04 13:14 |
errno.h | 2.30 kB | 02-09-04 13:14 |
fcntl.h | 3.30 kB | 02-09-04 13:14 |
<linux> | 0.00 B | 04-10-07 15:01 |
config.h | 2.16 kB | 02-09-04 13:14 |
fs.h | 9.72 kB | 02-09-04 13:14 |
hdreg.h | 2.94 kB | 02-09-04 13:14 |
head.h | 760.00 B | 02-09-04 13:14 |
kernel.h | 1.44 kB | 02-09-04 13:14 |
mm.h | 473.00 B | 02-09-04 13:14 |
sched.h | 13.25 kB | 02-09-04 13:14 |
sys.h | 5.41 kB | 02-09-04 13:14 |
tty.h | 3.93 kB | 02-09-04 13:14 |
signal.h | 4.01 kB | 02-09-04 13:14 |
stdarg.h | 1.77 kB | 02-09-04 13:14 |
stddef.h | 378.00 B | 02-09-04 13:14 |
string.h | 21.75 kB | 02-09-04 13:14 |
<sys> | 0.00 B | 04-10-07 15:01 |
stat.h | 2.37 kB | 02-09-04 13:14 |
times.h | 377.00 B | 02-09-04 13:14 |
types.h | 1.10 kB | 02-09-04 13:14 |
utsname.h | 423.00 B | 02-09-04 13:14 |
wait.h | 1.48 kB | 02-09-04 13:14 |
termios.h | 13.58 kB | 02-09-04 13:14 |
time.h | 1.81 kB | 02-09-04 13:14 |
unistd.h | 9.21 kB | 02-09-04 13:14 |
utime.h | 392.00 B | 02-09-04 13:14 |
<init> | 0.00 B | 04-10-07 15:01 |
main.c | 12.52 kB | 02-09-04 13:12 |
<kernel> | 0.00 B | 04-10-07 15:01 |
asm.s | 5.10 kB | 08-01-04 22:48 |
<blk_drv> | 0.00 B | 04-10-07 15:01 |
blk.h | 5.69 kB | 02-09-04 13:14 |
floppy.c | 23.49 kB | 02-09-04 13:12 |
hd.c | 17.14 kB | 02-09-04 13:12 |
ll_rw_blk.c | 7.59 kB | 02-09-04 13:12 |
Makefile | 4.25 kB | 08-01-04 22:53 |
ramdisk.c | 6.13 kB | 02-09-04 13:12 |
<chr_drv> | 0.00 B | 04-10-07 15:01 |
console.c | 30.91 kB | 02-09-04 13:12 |
keyboard.S | 21.04 kB | 08-01-04 22:59 |
Makefile | 4.81 kB | 08-01-04 22:59 |
rs_io.s | 5.75 kB | 08-01-04 22:59 |
serial.c | 2.91 kB | 02-09-04 13:12 |
tty_io.c | 18.40 kB | 02-09-04 13:12 |
tty_ioctl.c | 10.70 kB | 02-09-04 13:12 |
exit.c | 8.08 kB | 02-09-04 13:12 |
fork.c | 6.78 kB | 15-07-07 22:10 |
<math> | 0.00 B | 04-10-07 15:01 |
Makefile | 3.21 kB | 08-01-04 23:01 |
math_emulate.c | 2.08 kB | 02-09-04 13:12 |
mktime.c | 2.72 kB | 02-09-04 13:12 |
panic.c | 952.00 B | 02-09-04 13:12 |
printk.c | 1.75 kB | 02-09-04 13:12 |
sched.c | 18.57 kB | 16-07-07 21:23 |
signal.c | 5.61 kB | 02-09-04 13:12 |
sys.c | 7.62 kB | 02-09-04 13:12 |
system_call.s | 12.53 kB | 08-01-04 22:48 |
traps.c | 8.29 kB | 04-10-07 14:57 |
vsprintf.c | 9.96 kB | 02-09-04 13:12 |
<lib> | 0.00 B | 04-10-07 15:01 |
close.c | 397.00 B | 02-09-04 13:12 |
ctype.c | 1.72 kB | 02-09-04 13:12 |
dup.c | 401.00 B | 02-09-04 13:12 |
errno.c | 66.00 B | 02-09-04 13:12 |
execve.c | 607.00 B | 02-09-04 13:12 |
Makefile | 4.83 kB | 08-01-04 22:30 |
malloc.c | 13.50 kB | 02-09-04 13:12 |
open.c | 1.22 kB | 02-09-04 13:12 |
setsid.c | 382.00 B | 02-09-04 13:12 |
string.c | 199.00 B | 02-09-04 13:12 |
wait.c | 774.00 B | 02-09-04 13:12 |
write.c | 545.00 B | 02-09-04 13:12 |
_exit.c | 616.00 B | 02-09-04 13:12 |
Makefile | 8.58 kB | 08-01-04 22:21 |
<mm> | 0.00 B | 04-10-07 15:01 |
Makefile | 2.91 kB | 08-01-04 22:34 |
memory.c | 25.10 kB | 02-09-04 13:12 |
page.s | 842.00 B | 08-01-04 22:34 |
<tools> | 0.00 B | 04-10-07 15:01 |
build.c | 8.12 kB | 02-09-04 13:12 |
Sponsored links