truncate.c
来自「是学习LINUX必读的一个源码包和2.6内核相比可读性更强更容于理解」· C语言 代码 · 共 66 行
C
66 行
/* * linux/fs/truncate.c * * (C) 1991 Linus Torvalds */#include <linux/sched.h>#include <sys/stat.h>static void free_ind(int dev,int block){ struct buffer_head * bh; unsigned short * p; int i; if (!block) return; if (bh=bread(dev,block)) { p = (unsigned short *) bh->b_data; for (i=0;i<512;i++,p++) if (*p) free_block(dev,*p); brelse(bh); } free_block(dev,block);}static void free_dind(int dev,int block){ struct buffer_head * bh; unsigned short * p; int i; if (!block) return; if (bh=bread(dev,block)) { p = (unsigned short *) bh->b_data; for (i=0;i<512;i++,p++) if (*p) free_ind(dev,*p); brelse(bh); } free_block(dev,block);}void truncate(struct m_inode * inode){ int i; if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode))) return; for (i=0;i<7;i++) if (inode->i_zone[i]) { 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; inode->i_size = 0; inode->i_dirt = 1; inode->i_mtime = inode->i_ctime = CURRENT_TIME;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?