-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
122 lines (121 loc) · 2.7 KB
/
main.cpp
File metadata and controls
122 lines (121 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#define _CRT_SECURE_NO_WARNINGS
#include "inode_helper.h"
#include "cmd_ls.cpp"
#include "cmd_mkdir.cpp"
#include "cmd_cd.cpp"
#include "cmd_exit.cpp"
#include "cmd_touch.cpp"
#include "cmd_read.cpp"
#include "cmd_write.cpp"
#include "cmd_su.cpp"
#include "cmd_adduser.cpp"
#include "cmd_users.cpp"
#include "cmd_chmod.cpp"
#include "cmd_chown.cpp"
#include "cmd_delete.cpp"
#include "cmd_rename.cpp"
#include "arg_parser.h"
#include "user_context.h"
#include <iostream>
using namespace std;
void test() {
INodeHelper::Init();
Dir root = INodeHelper::GetRootDir();
auto newDir = INodeHelper::CreateDir(root.GetID(), "yinyinyin");
auto entries = root.getEntries();
for (auto entry : entries) {
cout << entry.name << endl;
}
ID_T tmp = root.findEntry("yinyinyin");
cout << tmp << endl;
cout << "hello world!" << endl;
}
int main(int argc, char ** argv) {
INodeHelper::Init();
UserContext::cur_dir_id = 1;
ArgParser parser;
CmdAdduser adduser;
CmdCd cd;
CmdChmod chmod;
CmdChown chown;
CmdExit exit;
CmdLs ls;
CmdMkdir mkdir;
CmdRead read;
CmdSu su;
CmdTouch touch;
CmdUsers users;
CmdWrite write;
CmdDelete _delete;
CmdRename rename;
parser.addEntry("ls", ArgEntry{
(IRunnable*)&ls,
"列出该目录下的文件"
});
parser.addEntry("mkdir", ArgEntry{
(IRunnable*)&mkdir,
"创建目录(支持递归创建)"
});
parser.addEntry("cd", ArgEntry{
(IRunnable*)&cd,
"改变当前工作目录"
});
parser.addEntry("exit", ArgEntry{
(IRunnable*)&exit,
"退出shell"
});
parser.addEntry("touch", ArgEntry{
(IRunnable*)&touch,
"改变文件访问时间,文件不存在时则创建"
});
parser.addEntry("read", ArgEntry{
(IRunnable*)&read,
"读入文件内容"
});
parser.addEntry("write", ArgEntry{
(IRunnable*)&write,
"写入文件内容"
});
parser.addEntry("su", ArgEntry{
(IRunnable*)&su,
"切换用户"
});
parser.addEntry("adduser", ArgEntry{
(IRunnable*)&adduser,
"新建用户"
});
parser.addEntry("users", ArgEntry{
(IRunnable*)&users,
"查看用户列表"
});
parser.addEntry("chmod", ArgEntry{
(IRunnable*)&chmod,
"更改文件权限"
});
parser.addEntry("chown", ArgEntry{
(IRunnable*)&chown,
"更改文件所有者"
});
parser.addEntry("delete", ArgEntry{
(IRunnable*)&_delete,
"删除文件"
});
parser.addEntry("rename", ArgEntry{
(IRunnable*)&rename,
"重命名文件"
});
string input;
cout << UserContext::user_name<<":"<< UserContext::GetCurPath() << "# ";
while (getline(cin, input)) {
int code = parser.run(input);
if (code == -2) {
break;
}
if (code != 0) {
cout << code << endl;
}
cout << UserContext::user_name << ":" << UserContext::GetCurPath() << "# ";
}
INodeHelper::Save();
//system("pause");
}