关闭文件

    有open就有close,下面来close一个文件。

    首先添加用户接口:

    kernel/fs.c

Code:
  1. /*-------------------------------------------------------------------------Close  
  2.     根据文件描述符close掉一个文件  
  3. */  
  4. void Close(int fd)   
  5. {   
  6.     Message m;   
  7.     m.msg_type = FS_CLOSE_FILE;   
  8.     m.i1 = fd;   
  9.        
  10.     Send_Receive_Shell(BOTH,PROC_FS_PID,&m);    /* 发给文件系统进程 */  
  11. }   

    在文件系统进程中处理这个消息:

    kernel/fs.c

Code:
  1. /* 关闭文件消息,交给Do_Close_File函数处理 */  
  2. case FS_CLOSE_FILE:   
  3.     Do_Close_File(&m);   
  4.     break;  
Code:
  1. /*-----------------------------------------------------------------Do_Close_File    
  2.     根据指定的fd关闭一个文件,包括3项工作  
  3.     把对应的i结点缓冲表中的i结点的shared_count自减1  
  4.     对应的fd全局表的fd的fd_inode字段置0,表示可用  
  5.     调用进程的PCB中的fd指针数组对应项置0,表示可用  
  6. */  
  7. static void Do_Close_File(Message *m)   
  8. {   
  9.     PCB *p_caller = &PCB_Table[m->src_proc_pid];    /* 取得调用进程的PCB指针 */  
  10.     int fd = m->i1;     /* 取得fd */  
  11.        
  12.     Clear_I_Node(p_caller->fd_ptr_table[fd]->fd_inode);   
  13.     p_caller->fd_ptr_table[fd]->fd_inode = 0;   
  14.     p_caller->fd_ptr_table[fd] = 0;   
  15. }  

    用到的宏:

    include/const.h

Code:
  1. #define FS_OPEN_FILE                6           /* 打开(创建)一个文件 */   
  2. #define FS_CLOSE_FILE               7           /* 关闭一个文件 */  

    添加声明:

    include/proto.h

Code:
  1. /* 打开一个文件,返回文件描述符 */  
  2. int Open(const char *path,int flag);   
  3.   
  4. /* 根据文件描述符close掉一个文件 */  
  5. void Close(int fd);  

    验证的事儿就算了,太简单了。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值