Exemplo n.º 1
0
        public void mount()
        {
            Program.myForm.Log.Text += "Начало монтирования системы\n";
            CountBlocks              = (int)(StartMemoryHDD / Blocks_HDD); //Вычисление количества блоков
            inode_count              = Blocks_HDD / Inode_Memory;          //Вычисление количества инодов
            Program.myForm.Log.Text += "Количество памяти в байтах: " + StartMemoryHDD + "\n";
            Program.myForm.Log.Text += "Размер блока: " + Blocks_HDD + " байт\n";
            Program.myForm.Log.Text += "Размер inode: " + Inode_Memory + " байт\n\n";
            Program.myForm.Log.Text += "Количество созданных блоков: " + CountBlocks + "\n";
            Program.myForm.Log.Text += "Количество inode в блоках: " + inode_count + "\n";
            Program.myForm.Log.Text += "Размер одного кластера: " + claster + "\n\n";

            List <Block> Blocks = new List <Block>(CountBlocks);

            for (int i = 0; i < CountBlocks; i++)
            {
                inode[] ino = new inode[inode_count];
                for (int j = 0; j < inode_count; j++)
                {
                    ino[j] = new inode();
                }

                Block inod = new Block(ino, Blocks_HDD / claster);
                for (int j = 0; j < Blocks_HDD / claster; j++)
                {
                    inod.claster[j].SetNumber(i, j);
                }
                int c = 0;
                foreach (inode t in inod.InodeMap)
                {
                    c++;
                    t.inode_number = c;
                }
                Blocks.Add(inod);
            }
            Super = new Superblock(Blocks);

            Root.List                     = new List <TypeOf>();
            Root.name                     = "Root";
            Root.attributes               = function_inode.Search_free_inode();
            Root.attributes.di_uid        = "admin";
            Root.attributes.dimode.type   = "folder";
            Root.attributes.dimode.rights = "rw-rw";
            Root.attributes.di_size       = 0;
            Root.attributes.free          = false;

            Serializing.Ser(Blocks);
        }
Exemplo n.º 2
0
        public void MainMenu()
        {
            if (Sess.user_id != 0)
            {
                switch (Program.myForm.Command.Text)
                {
                case "process":
                {
                    Core core = new Core(4);
                    core.init();
                    Core.proc[1].Memory = Core.proc[0].Memory;
                    Core.mem[0].process.Add(Core.proc[1].PID);
                    core.Planning();

                    break;
                }

                case "mount":
                {
                    mount();
                    break;
                }

                case "user_to_file":
                {
                    Serializing_User.Ser(Sess.user_list);
                    break;
                }

                case "inode_map":
                {
                    Program.myForm.Log.Text += "Block.Inode" + "\n";
                    List <string> t = Super.FreeInode();
                    for (int i = 0; i < t.Count; i++)
                    {
                        Program.myForm.Log.Text += t[i] + "\n";
                    }
                    break;
                }

                case "claster_map":
                {
                    Program.myForm.Log.Text += "Block.Claster" + "\n";
                    List <string> t = Super.FreeClaster();
                    for (int i = 0; i < t.Count; i++)
                    {
                        Program.myForm.Log.Text += t[i] + "\n";
                    }
                    break;
                }

                case "exit":
                {
                    function_user.new_session();
                    break;
                }

                case "lf":
                {
                    catalog t = new catalog();
                    t = function_dir.See_folder(Sess.path);
                    if (t.List.Count == 0)
                    {
                        Program.myForm.Log.Text += "В папке '" + t.name + "' пусто!\n\n";
                    }
                    else
                    {
                        Program.myForm.Log.Text += "Папка '" + t.name + "' содержит:" + "\n";
                        for (int i = 0; i < t.List.Count; i++)
                        {
                            Program.myForm.Log.Text += t.List[i].name + " (" + t.List[i].attributes.dimode.type + ")\n";
                        }
                        Program.myForm.Log.Text += "\n";
                    }
                    break;
                }

                default:
                {
                    Regex  regex   = new Regex(@"^(?<command>[A-Za-z_]+)[ ]*");
                    Match  matches = regex.Match(Program.myForm.Command.Text);
                    string command = String.Empty;
                    if (matches.Success)
                    {
                        command = matches.Groups["command"].Value.ToString();
                    }
                    switch (command)
                    {
//--------------------------------------- пользователи
                    case "create_user":
                    {
                        if (Main.Sess.user_name == "admin")
                        {
                            function_user.Create_user(Program.myForm.Command.Text);
                        }
                        else
                        {
                            Program.myForm.Log.Text += "Для добавления учетной записи нужны права администратора!\n\n";
                        }
                        break;
                    }

                    case "del_user":
                    {
                        if (Main.Sess.user_name == "admin")
                        {
                            function_user.Delete_user(Program.myForm.Command.Text);
                        }
                        else
                        {
                            Program.myForm.Log.Text += "Для удаления учетной записи нужны права администратора!\n\n";
                        }
                        break;
                    }

                    case "reset_pass":
                    {
                        if (Main.Sess.user_name == "admin")
                        {
                            function_user.resetPass(Program.myForm.Command.Text);
                        }
                        else
                        {
                            Program.myForm.Log.Text += "Для изменения пароля учетной записи нужны права администратора!\n\n";
                        }
                        break;
                    }

//--------------------------------------- папки
                    case "create_dir":
                    {
                        Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<dir>[A-Za-z0-9]+)");
                        matches = regex_d.Match(Program.myForm.Command.Text);
                        string dir = String.Empty;
                        if (matches.Success)
                        {
                            dir = matches.Groups["dir"].Value.ToString();
                            function_dir.create_dir(dir, Sess.path, Sess.user_name);
                            Serializing.Ser(Super.Blocks);
                        }
                        else
                        {
                            Program.myForm.Log.Text += "Некорректое имя директории!\n\n";
                        }
                        break;
                    }

                    case "way":
                    {
                        Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<dir>[./A-Za-z0-9]+)");
                        matches = regex_d.Match(Program.myForm.Command.Text);
                        string dir = String.Empty;
                        if (matches.Success)
                        {
                            dir = matches.Groups["dir"].Value.ToString();
                            if (dir == "./")
                            {
                                string[] match = Sess.path.Split('/');
                                Sess.path = "";
                                for (int i = 0; i < match.Count() - 2; i++)
                                {
                                    Sess.path += match[i] + '/';
                                }
                            }
                            else
                            {
                                Sess.path = function_dir.Search_folder(dir, Sess.path);
                            }
                        }
                        else
                        {
                            Program.myForm.Log.Text += "Некорректый путь!\n\n";
                        }
                        break;
                    }

                    case "rename":
                    {
                        Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<folder>[A-Za-z0-9]+)[|](?<rename>[A-Za-z0-9]+)");
                        matches = regex_d.Match(Program.myForm.Command.Text);
                        string dir = String.Empty;
                        if (matches.Success)
                        {
                            dir = matches.Groups["folder"].Value.ToString();
                            string rename = matches.Groups["rename"].Value.ToString();
                            {
                                string c = Sess.path + dir + "/";
                                function_dir.ren_folder(c, rename);
                                Serializing.Ser(Super.Blocks);
                            }
                        }
                        else
                        {
                            Program.myForm.Log.Text += "Некорректно введена команда!\nВведите rename <oldName>|<newName>\n\n";
                        }
                        break;
                    }

                    case "del_dir":
                    {
                        Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<folder>[A-Za-z0-9]+)");
                        matches = regex_d.Match(Program.myForm.Command.Text);
                        string dir = String.Empty;
                        if (matches.Success)
                        {
                            dir = matches.Groups["folder"].Value.ToString();
                            {
                                function_dir.Dell_folder(Sess.path, dir);
                                Serializing.Ser(Super.Blocks);
                            }
                        }
                        else
                        {
                            Program.myForm.Log.Text += "Некорректно введено имя директории!\n\n";
                        }
                        break;
                    }

//--------------------------------------- файлы
                    case "create_file":
                    {
                        Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<fil>[A-Za-z0-9]+)");
                        matches = regex_d.Match(Program.myForm.Command.Text);
                        string fil = String.Empty;
                        if (matches.Success)
                        {
                            fil = matches.Groups["fil"].Value.ToString();
                            function_file.create_file(fil, Sess.path, Sess.user_name);
                            Serializing.Ser(Super.Blocks);
                        }
                        else
                        {
                            Program.myForm.Log.Text += "Некорректно введено имя файла!\n\n";
                        }
                        break;
                    }

                    case "del_file":
                    {
                        Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<fil>[A-Za-z0-9]+)");
                        matches = regex_d.Match(Program.myForm.Command.Text);
                        string fil = String.Empty;
                        if (matches.Success)
                        {
                            fil = matches.Groups["fil"].Value.ToString();
                            {
                                string c = Sess.path;
                                function_dir.Dell_folder(c, fil);
                                Serializing.Ser(Super.Blocks);
                            }
                        }
                        else
                        {
                            Program.myForm.Log.Text += "Некорректно введено имя файла!\n\n";
                        }
                        break;
                    }

                    case "insert_file":
                    {
                        Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<files>[A-Za-z0-9]+)");
                        matches = regex_d.Match(Program.myForm.Command.Text);
                        string dir = String.Empty;
                        if (matches.Success)
                        {
                            dir = matches.Groups["files"].Value.ToString();
                            Boolean tr = function_file.Is_file(dir, Main.Sess.path);
                            if (tr)
                            {
                                file f = new file();                                     //нужный файл
                                f = function_file.search_file_retf(dir, Main.Sess.path); //поиск нужного файла
                                                                                         //Если учетная запись админа или если создателю можно записывать, или если другим пользователям можно записывать
                                if ((Main.Sess.user_name == "admin") ||
                                    ((f.attributes.di_uid == Main.Sess.user_name) && (function_inode.rights_for_all(f)[1])) ||
                                    ((function_inode.rights_for_all(f)[3])))
                                {
                                    function_file.modify_file(f);
                                }
                                else
                                {
                                    Program.myForm.Log.Text += "Вам не разрешено редактировать этот файл. \nВы не являетесь владельцем данного файла.\n\n";
                                }
                            }
                            else
                            {
                                Program.myForm.Log.Text += "Файл не существует или у вас нет прав для доступа к нему\n\n";
                            }
                        }
                        else
                        {
                            Program.myForm.Log.Text += "Некорректно введено имя файла!\n\n";
                        }
                        break;
                    }


                    case "edit_file":
                    {
                        Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<files>[A-Za-z0-9]+)");
                        matches = regex_d.Match(Program.myForm.Command.Text);
                        string dir = String.Empty;
                        if (matches.Success)
                        {
                            dir = matches.Groups["files"].Value.ToString();
                            Boolean tr = function_file.Is_file(dir, Main.Sess.path);
                            if (tr)
                            {
                                //Находим текст файла
                                file f = new file();                                     //нужный файл
                                f = function_file.search_file_retf(dir, Main.Sess.path); //поиск нужного файла
                                //Если учетная запись админа или если создателю можно записывать, или если другим пользователям можно записывать
                                if ((Main.Sess.user_name == "admin") ||
                                    ((f.attributes.di_uid == Main.Sess.user_name) && (function_inode.rights_for_all(f)[1])) ||
                                    ((function_inode.rights_for_all(f)[3])))
                                {
                                    string text = function_file.see_file(dir, Main.Sess.path);
                                    function_file.modify_file(f, text);
                                }
                                else
                                {
                                    Program.myForm.Log.Text += "Вам не разрешено редактировать этот файл. \nВы не являетесь владельцем данного файла.\n\n";
                                }
                            }
                            else
                            {
                                Program.myForm.Log.Text += "Файл не существует или у вас нет прав на его редактирование\n\n";
                            }
                            Serializing.Ser(Super.Blocks);
                        }
                        else
                        {
                            Program.myForm.Log.Text += "Некорректно введено имя файла!\n\n";
                        }
                        break;
                    }

                    case "watch_file":
                    {
                        Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<files>[A-Za-z0-9]+)");
                        matches = regex_d.Match(Program.myForm.Command.Text);
                        string dir = String.Empty;
                        if (matches.Success)
                        {
                            dir = matches.Groups["files"].Value.ToString();
                            Program.myForm.Log.Text += function_file.see_file(dir, Main.Sess.path) + "\n\n";
                            Serializing.Ser(Super.Blocks);
                        }
                        else
                        {
                            Program.myForm.Log.Text += "Некорректно введено имя файла!\n\n";
                        }
                        break;
                    }

                    case "attr":
                    {
                        Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<files>[A-Za-z0-9]+)");
                        matches = regex_d.Match(Program.myForm.Command.Text);
                        string dir = String.Empty;
                        if (matches.Success)
                        {
                            dir = matches.Groups["files"].Value.ToString();
                            Program.myForm.Log.Text += function_file.attr(dir, Main.Sess.path);
                            Serializing.Ser(Super.Blocks);
                        }
                        else
                        {
                            Program.myForm.Log.Text += "Некорректно введено имя!\n\n";
                        }
                        break;
                    }

                    case "rights":
                    {
                        Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<files>[A-Za-z0-9]+)[ ](?<rights>[r-][w-]-[r-][w-])");
                        matches = regex_d.Match(Program.myForm.Command.Text);
                        string dir    = String.Empty;
                        string rights = String.Empty;
                        if (matches.Success)
                        {
                            dir    = matches.Groups["files"].Value.ToString();
                            rights = matches.Groups["rights"].Value.ToString();
                            function_inode.rights(dir, Main.Sess.path, rights);
                            Serializing.Ser(Super.Blocks);
                        }
                        else
                        {
                            Program.myForm.Log.Text += "Некорректно введено имя или права!\n\n";
                        }
                        break;
                    }

                    default:
                    {
                        Program.myForm.Log.Text += Program.myForm.Command.Text + ": Неизвестная команда\n\n";
                        break;
                    }
                    }
                    break;
                }
                }
            }
            else
            {
                if (Program.myForm.Command.Text != "")
                {
                    bool result = Start(Program.myForm.Command.Text);
                    if (!result)
                    {
                        Program.myForm.Log.Text += "Необходимо войти в систему!\n\n";
                    }
                }
            }
        }