-
大小: 43KB文件類(lèi)型: .cpp金幣: 1下載: 0 次發(fā)布日期: 2021-06-15
- 語(yǔ)言: C/C++
- 標(biāo)簽: Linux/Unix??文件系統(tǒng)??C??
資源簡(jiǎn)介
用C編寫(xiě)的一個(gè)Unix/Linux文件系統(tǒng)
代碼片段和文件信息
#include?
#include?
#include??
#include??
struct?command //命令行
{?
char?com[10];
}cmd[22];?
struct?user //系統(tǒng)用戶(hù)組
{
int?userid;
char?username[10];
char?password[10];
int?groupid;
}users[8];
struct?block //塊信息
{?
int?a; //?模擬盤(pán)塊是否被占用?
int?n; //?下一組空閑的盤(pán)塊的個(gè)數(shù)
int?free[50]; //?下一組存放空閑盤(pán)塊的地址?
};
struct?block_super //超級(jí)塊???使用成組鏈接法來(lái)表示空閑塊信息
{?
int?n; //?空閑的盤(pán)塊的個(gè)數(shù)
int?free[50];???//?存放進(jìn)入棧中的空閑塊
block?memory[20449]; //全部塊信息
}super_block;
struct?node //?i結(jié)點(diǎn)信息??
{?
int?file_style; //?i結(jié)點(diǎn)?文件類(lèi)型?0代表文件類(lèi)型是目錄文件?1代表文件類(lèi)型是普通文件?
int?file_length; //?i結(jié)點(diǎn)?文件長(zhǎng)度??
int?file_mode; //?i結(jié)點(diǎn)?讀寫(xiě)權(quán)限??
int?file_userid; //?i結(jié)點(diǎn)?所屬用戶(hù)
int?file_groupid; //?i節(jié)點(diǎn)?所屬組別
int?file_address[100];??//?i結(jié)點(diǎn)?文件的物理地址?
int?file_ilink;
}?i_node[640];
struct?dir //?目錄項(xiàng)信息?
{?
char?file_name[10]; //?文件名??
int??i_num; //?文件的結(jié)點(diǎn)號(hào)??
char?dir_name[10]; //?文件所在的目錄
int?is_slink;
char?P_filename[10];
}?root[640];
struct?physical_block //定義存放文件的數(shù)據(jù)體
{
char?p[512];
}physicalBlock[20449];
struct?user_open_table //用戶(hù)打開(kāi)表項(xiàng)
{
int?point[25]; //用戶(hù)打開(kāi)文件指針(指向系統(tǒng)打開(kāi)表項(xiàng))
}UserOpenTable[8];
struct?system_open_table//系統(tǒng)打開(kāi)表項(xiàng)
{
char?filename[10]; //文件名稱(chēng)
int??a_num; //指針,指向活動(dòng)i結(jié)點(diǎn)
}SystemOpenTable[200];
struct?active_node //活動(dòng)i節(jié)點(diǎn)
{
struct?node?file_node; //結(jié)點(diǎn)具體信息
int?i_count; //計(jì)數(shù),打開(kāi)該文件的用戶(hù)數(shù)
int?i_num; //指針,指向結(jié)點(diǎn)號(hào)
}ActiveNode[200];
user?cur_user; //當(dāng)前用戶(hù)
char?cur_dir[10]=“root“; //當(dāng)前目錄?
int address_buffer[1000];???//文件地址緩沖區(qū)
int?a_num; //當(dāng)前活動(dòng)節(jié)點(diǎn)位置
char?buffer[512]; //寫(xiě)文件內(nèi)容緩沖
//聲明函數(shù)
//與文件系統(tǒng)初始化及運(yùn)行相關(guān)的函數(shù)
void?InitSystem(FILE?*fp);
void?InitDisks();
void?InitUsers();
void?InitTable();
void?InitCommand();
void?Run(FILE?*fp);
//讀寫(xiě)信息的函數(shù)
void?ReadFromFile(FILE?*fp);
void?WriteToFile(FILE?*fp);
void?ReadUsers(FILE?*fps);
void?SaveUsers(FILE?*fps);
//支持命令運(yùn)行的函數(shù)
void?InsertTable(char?filename[]?int?i_num);
int?SelectTable(char?filename[]);
int?IsPermit(int?i_num?char?operation);
int?AllotDisks(int?length);
void?RecoverDisks(int?length);
//與命令有關(guān)的函數(shù)
int?login();
void?help();
void?show_curdir();
void?go_dir(char?tmp[]);
void?back_dir();
void?create_dir(char?tmp[]);
void?del_dir(char?tmp[]);
void?create_file(char?tmp[]);
void?open_file(char?tmp[]);
void?read_file(char?tmp[]);
void?write_file(char?tmp[]);
void?close_file(char?tmp[]);
void?delete_file(char?tmp[]);
void?show_info();
void?logout(FILE?*fp);
int?change_user(FILE?*fpchar?tmp[]);
void?change_mode(char?tmp[]);
void?manage_user();
void?h_link(char?tmp[]);
void?s_link(char?tmp[]);
void?rename(char?tmp[]);
void?cas_deldir(char?tmp[]);
void?main()
{
FILE?*fp;?
fp=fopen(“filesystem““rb“);//打開(kāi)文件用二進(jìn)制的方式讀取
InitSystem(fp); //初始化系統(tǒng)
InitCommand(); //初始化命令
Run(fp); //運(yùn)行
}
//初始化系統(tǒng)操作如果有系統(tǒng)文件就讀取如果沒(méi)有就通過(guò)調(diào)用各初始化函數(shù)初始化系統(tǒng)
void?InitSystem(FILE?*fp)
{
//如果文件存在讀取如果文件不存在就初始化
if(fp==NULL)
{?
InitDisks(); //首次生成時(shí)初始化磁盤(pán)
}?
else?
{?
ReadFromF
- 上一篇:魚(yú)眼矯正代碼
- 下一篇:VC++ 中國(guó)象棋程序源代碼
評(píng)論
共有 條評(píng)論