📄 creatde.c
字号:
/************************************************/
/* */
/* creatdel.c */
/* */
/************************************************/
#include <stdio.h>
#include "filsys.h"
int creat( char * pathname, unsigned short mode )
{
unsigned int di_ith, di_ino;
struct inode * inode;
int i, j;
di_ino = namei( pathname );
if( di_ino != NULL ) /* 该文件名已经存在 */
{
inode = iget( di_ino );
if( !( access( inode ) | WRITE )) // 不允许写,出错
{
iput( inode );
printf( "You have no access to creat\n" );
return -1;
}
/* 以下重写一个文件 */
/* 释放原有文件的磁盘块 */
for( i = 0; i < inode->i_size / BLOCKSIZ + 1; i++ )
bfree( inode->i_addr[i] );
inode->i_size = 0;
/* 该文件已经打开 */
for( i = 0; i < SYSOPENFILE; i++ )
if( sys_ofile[i].f_inode == inode )
{
sys_ofile[i].f_off = 0;
for( j = 0; j < NOFILE; j++ )
{
if( user[user_id].u_ofile[j] == i )
return j;
}
}
/* 该文件还没有打开 */
for( i = 0; i < NOFILE; i++ )
if( user[user_id].u_ofile[i] == SYSOPENFILE + 1 )
{
user[user_id].u_uid = inode->i_uid;
user[user_id].u_gid = inode->i_gid;
for( j = 0; j < SYSOPENFILE; j++ )
if( sys_ofile[j].f_count == 0 )
{
user[user_id].u_ofile[i] = j;
sys_ofile[j].f_off = 0;
sys_ofile[j].f_count = 1;
sys_ofile[j].f_inode = inode;
sys_ofile[j].f_flag = inode->i_mode;
}
return i;
}
}
else /* not existed before */ // 建立新文件
{
inode = ialloc();
inode->i_addr[0] = balloc();
di_ith = iname( pathname );
dir.size++;
dir.direct[di_ith].d_ino = inode->i_ino;
inode->i_mode = mode | DIREG;
inode->i_uid = user[user_id].u_uid;
inode->i_gid = user[user_id].u_gid;
inode->i_size = 0;
inode->i_number = 1;
for( i = 0; i < SYSOPENFILE; i++ )
{
if( sys_ofile[i].f_count == 0 )
break;
}
for( j = 0; j < NOFILE; j++ )
{
if( user[user_id].u_ofile[j] == SYSOPENFILE + 1 )
break;
}
user[user_id].u_ofile[j] = i;
sys_ofile[i].f_flag = mode;
sys_ofile[i].f_count = 1;
sys_ofile[i].f_off = 0;
sys_ofile[i].f_inode = inode;
return j;
}
}
_delete( char * filename )
{
unsigned int dinodeid;
struct inode * inode;
dinodeid = namei( filename );
if( dinodeid != NULL )
inode = iget( dinodeid );
inode->i_number--;
iput( inode );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -