⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filetable.java

📁 操作系统课内实验部分
💻 JAVA
字号:
import java.util.*;import java.io.*;// This class keeps track of all files currently open.// In a real Unix system, this information is split into three levels:// There is a table of "in-core inodes" with one entry for each file that// has been opened by any process, there is another table with one entry// for each "instance" of an open file (allowing multiple seek pointers// into the same file), and there is a per-process table// mapping instances to file descriptors./* *Our implementation: *A byte array called bitmap tells whether the specified index has a file open. *A fileDescriptor array fdArray contains FD objects. *Each FD object is an instance of the class FileDescriptor (below) that maintains *information about the specified file. */class FileTable {    public static final int MAX_FILES = 21;     public int bitmap[];    public FileDescriptor[] fdArray;        public FileTable(){	fdArray = new FileDescriptor[MAX_FILES];	bitmap = new int[MAX_FILES];	for(int i = 0; i < MAX_FILES; i++){	    bitmap[i] = 0;	}    }        //returns the index in the file table    public int allocate(){	for(int i = 0; i < MAX_FILES; i++){	    if(bitmap[i] == 0)		return i;	}	System.out.println("Cannot open file... filetable is full.");	return -1; //filetable is full already.    }        //add will overwrite. **********!!!!!!!!!    public int add(Inode inode, int inumber, int fd){	if(bitmap[fd] != 0)	    return -1;	bitmap[fd] = 1;	fdArray[fd] = new FileDescriptor(inode, inumber);	return 0;  //SUCCESS this time.    }        public void free(int fd){	bitmap[fd] = 0;    }    //returns true if it is valid, false if not.    public boolean isValid(int fd){	if (fd < 0 || fd >= MAX_FILES) {	    System.out.println("ERROR: Invalid file descriptor (must be 0 <= fd <= "+ MAX_FILES + ") : " + fd);	    return false;	}	else if (bitmap[fd] > 0){	    return true;	}	else{	    return false;	}    }    public Inode getInode(int fd){	if(bitmap[fd] == 0){	    return null;	}	else{	    return fdArray[fd].getInode();	}    }    public int getInumber(int fd){	if(bitmap[fd] == 0){	    return 0;   //ERROR, if invalid	}	else{	    return fdArray[fd].getInumber();	}    }    public int getSeekPointer(int fd){	if(bitmap[fd] == 0){	    return 0;  //invalid	}	else{	    return fdArray[fd].getSeekPointer();	}    }    public int setSeekPointer(int fd, int newPointer) {	if(bitmap[fd] == 0){	    return 0;  //invalid	}	else{	    fdArray[fd].setSeekPointer(newPointer);	    return 1;  //valid	}    }    public int setFileSize(int fd, int newFileSize){	if(bitmap[fd] == 0){	    return 0; //invalid	}	else{	    fdArray[fd].setFileSize(newFileSize);	    return 1;	}    }    public int getFDfromInumber(int inumber){       	for(int i = 0; i < MAX_FILES; i++){	    if(bitmap[i] == 1){		if (fdArray[i].getInumber() == inumber){		    return i;		}	    }	    	}   	return -1;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -