📄 filebuf.c
字号:
/*************************************************************************
* Copyright 2002 National ASIC Center, All right Reserved
*
* FILE NAME: filebuf.c
* PROGRAMMER: DSA
* Date of Creation: 2002/08/05
* DESCRIPTION: This module is about operation of
* imformation of files which have been opened
*
* NOTE: In this module,we don't check the parameter
*
* FUNCTIONS LIST:
* -------------------------------------------------------------------------
* init_FILE_buf()
* get_FILE()
* remove_FILE()
*-------------------------------------------------------------------------
* MODIFICATION HISTORY
*
* 2002/08/05 by DSA Creation of this file
* 2002/08/29 by DSA add get_fscb_item( fp ) in get_FILE()
* 2002/09/02 by DSA add the judge about creating directory
******************************************************************************/
//#include <stdio.h>
#include <string.h>
//#include <stdlib.h>
#include <filesys\fs.h>
#include "filebuf.h"
#include "file.h"
#if 0
FILE_S filebuf[MAX_OPEN_FILE] = {
/*flags, curp, magic, fcb, pointer, path, use, curfcb, curblkid */
{ 0, 0, 0, NULL, NULL, NULL, 0, NULL, 0 },
{ 0, 0, 0, NULL, NULL, NULL, 0, NULL, 0 },
{ 0, 0, 0, NULL, NULL, NULL, 0, NULL, 0 },
{ 0, 0, 0, NULL, NULL, NULL, 0, NULL, 0 },
{ 0, 0, 0, NULL, NULL, NULL, 0, NULL, 0 },
{ 0, 0, 0, NULL, NULL, NULL, 0, NULL, 0 },
{ 0, 0, 0, NULL, NULL, NULL, 0, NULL, 0 },
{ 0, 0, 0, NULL, NULL, NULL, 0, NULL, 0 },
{ 0, 0, 0, NULL, NULL, NULL, 0, NULL, 0 },
{ 0, 0, 0, NULL, NULL, NULL, 0, NULL, 0 },
/*{ 0, NULL, 0, NULL, NULL, NULL, 0, NULL, 0 },*/
};
#endif
FILE_S filebuf[MAX_OPEN_FILE];
void init_FILE_buf( void )
{
int i;
for ( i = 0; i < MAX_OPEN_FILE; i++ )
memset( &filebuf[i], 0, sizeof(FILE_S) );
}
FILE_S* get_FILE( char* path, int mode )
{
register FILE_S* p, *q;
int i;
q = NULL;
/* LOCK should be added here! */
FS_LOCK( FILEBUFFER_LOCK_ID );
if( *(path + strlen( path ) - 1) == '/' ){
get_FCB( path, mode );
goto EXIT_ENTRY;
}
/* compare the path, search the file which has been opened*/
for(i = 0, p = filebuf; i < MAX_OPEN_FILE; i++, p++){
if( p->flag == BE_USED && strcmp( path, p->path ) == 0 ){
get_fscb_item( p );//02-8-29 11:33
p->use++;
q = p;
goto EXIT_ENTRY;
}
}
/* find the free number of array, and fill it*/
for(i = 0, p = filebuf; i < MAX_OPEN_FILE; i++, p++){
if( p->flag == NOT_BE_USED ){
if( open_file( path, p, mode ) < 0 ) break;
q = p;
break;
}
}
EXIT_ENTRY:
/* UNLOCK should be added here!*/
FS_UNLOCK( FILEBUFFER_LOCK_ID );
return q;
}
int remove_FILE( FILE_S* fp )
{
if( fp->magic != FILE_MAGIC ) return FS_ERR_MAGIC;
/* LOCK should be added here! */
FS_LOCK( FILEBUFFER_LOCK_ID );
if( fp->use == 1 ){
close_file( fp );
memset((unsigned char *)fp,0x00,sizeof( FILE_S ) );
}else{
fp->use--;
}
/* UNLOCK should be added here!*/
FS_UNLOCK( FILEBUFFER_LOCK_ID );
return FS_OK;
}
/*
* add by DSA 2002/11/04
* close file immediately
*
*/
int remove_FILEnow( FILE_S* fp )
{
if( fp->magic != FILE_MAGIC ) return FS_ERR_MAGIC;
/* LOCK should be added here! */
FS_LOCK( FILEBUFFER_LOCK_ID );
close_file( fp );
fp->use--;
if( fp->use == 0 )
memset((unsigned char *)fp,0x00,sizeof( FILE_S ) );
/* UNLOCK should be added here!*/
FS_UNLOCK( FILEBUFFER_LOCK_ID );
return FS_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -