#include "FileSystem.h"
FileSystem::FileSystem() {}
FileSystem::~FileSystem() {}
bool FileSystem::Create(char *img_name, int size, int size_blocks)
{
SB.SizeBlocks = size_blocks;
SB.SizeINodes = sizeof(CInode);
SB.size_FS = size;
img = fopen(img_name,"w");
if(img == NULL)
return false;
for (int i=0;i<size;i++)
fputc('\0',img);
fclose(img);
return true;
}
bool FileSystem::CopyFromHDD(char *img_name, char *file)
{
FILE *fileHDD;
img = fopen(img_name,"r+");
fileHDD = fopen(file,"r+");
if(img == NULL || fileHDD == NULL)
return false;
char ch = fgetc(img);
int pos = 0;
while(ch!='\0') {
pos++;
fseek(img,pos*SB.SizeBlocks,SEEK_SET);
ch = fgetc(img); }
fseek(img,pos*SB.SizeBlocks,SEEK_SET);
int size_read = 0, j = 0, j_1 = 0;
CInode node;
CInode node_new1;node_new1.nBlocks[j] = node_new1.file_size = 0;
node_new1.number = inodes.size()+1;
CInode node_new2;node_new2.nBlocks[j] = node_new2.file_size = 0;
node_new2.number = inodes.size()+2;
CInode node_new3;node_new3.nBlocks[j] = node_new3.file_size = 0;
node_new3.number = inodes.size()+3;
for(int i = 0; i < 10; i++)
{
node.nBlocks[i] = -1;
node_new1.nBlocks[i] = -1;
node_new2.nBlocks[i] = -1;
node_new3.nBlocks[i] = -1;
}
for(int i = 0; i < 3; i++)
node.nCosBlocks[i] = -1;
node.number = inodes.size();
node.nBlocks[j] = pos;
node.name_file = file;
while((ch=fgetc(fileHDD))!=EOF)
{
size_read++;
fputc(ch,img);
if(size_read == SB.SizeBlocks)
{
size_read = 0;
pos++;
if(j<10)
j++;
if(j<10)
node.nBlocks[j] = pos;
else
{
if(j == 10)
{
if(j_1 == 0)
node.nCosBlocks[0] = node_new1.number;
if(j_1 < 10)
{
node_new1.nBlocks[j_1] = pos;
j_1++;
}
else
{
j_1 = 0;
j++;
}}
if(j == 11)
{
if(j_1 == 0)
node.nCosBlocks[1] = node_new2.number;
if(j_1 < 10)
{
node_new2.nBlocks[j_1] = pos;
j_1++;
}
else
{
j_1 = 0;
j++;
}}
if(j == 12)
{
if(j_1 == 0)
node.nCosBlocks[2] = node_new3.number;
if(j_1 < 10)
{
node_new3.nBlocks[j_1] = pos;
j_1++;
}
else
{
j_1 = 0;
j++;
}}}}}
fseek(img,0,SEEK_SET);
node.file_size = (pos-node.nBlocks[0])*SB.SizeBlocks + size_read;
inodes.push_back(node);
if(node_new1.nBlocks[0] != -1)
inodes.push_back(node_new1);
if(node_new2.nBlocks[0] != -1)
inodes.push_back(node_new2);
if(node_new3.nBlocks[0] != -1)
inodes.push_back(node_new3);
return true;
}
void FileSystem::ShowRoot()
{
if(inodes.empty() == false)
{
cout<<"\nИнформация о ФС."<<endl;
cout<<"Размер ФС : "<<SB.size_FS<<" бт"<<endl;
cout<<"Размер блока : "<<SB.SizeBlocks<<" бт"<<endl;
cout<<"Размер инд. дескр.: "<<SB.SizeINodes<<" бт"<<endl;
cout<<"Название файла\tРазмер\tиндексный дискриптор"<<endl;
int dirty = 0;
for(int i = 0; i< inodes.size();i++)
dirty += inodes[i].file_size;
cout<<"Свободное место : "<<SB.size_FS - dirty<<endl;
for(int i = 0; i < inodes.size(); i++)
if(inodes[i].file_size != 0)
{
cout<<inodes[i].name_file<<"\t\t";
cout<<inodes[i].file_size<<" бт"<<'\t';
cout<<inodes[i].number<<endl;
}
}
else
cout<<"Файловая система пуста"<<endl;
cout<<endl;
}
bool FileSystem::CopyToHDD(char *img_name,char *file, char *fileToHDD)
{
int index_start = -1;
for(int i = 0; i < inodes.size(); i++)
if(inodes[i].name_file == fileToHDD)
{
index_start = i;
break; }
if(index_start == -1)
return false;
FILE *fileHDD;
img = fopen(img_name,"r");
fileHDD = fopen(file,"w");
if(img == NULL || fileHDD == NULL)
return false;
char ch;
for(int i = 0; i < 10; i++)
{
if(inodes[index_start].nBlocks[i] != -1)
{
fseek(img,inodes[index_start].nBlocks[i] * SB.SizeBlocks,SEEK_SET);
for(int j = 0; j < SB.SizeBlocks; j++)
{
ch = fgetc(img);
if(ch != '\0')
fputc(ch,fileHDD);
}}}
for(int i = 0; i <3; i++)
{
if(inodes[index_start].nCosBlocks[i] != -1)
{
for(int k = 0; k < 10; k++)
if(inodes[inodes[index_start].nCosBlocks[i]].nBlocks[k]!= -1)
{
fseek(img,inodes[inodes[index_start].nCosBlocks[i]].nBlocks[k] * SB.SizeBlocks,SEEK_SET);
for(int j = 0; j < SB.SizeBlocks; j++)
{
ch = fgetc(img);
if(ch != '\0')
fputc(ch,fileHDD);
}}}}
fclose(img);
fclose(fileHDD);
return true;
}
bool FileSystem::Delete(char *img_name, char *file)
{
img = fopen(img_name,"r+");
if(img == NULL)
return false;
int index_start = -1;
for(int i = 0; i < inodes.size(); i++)
if(inodes[i].name_file == file)
{
index_start = i;
break;
}
if(index_start == -1)
return false;
for(int i = 0; i < 10; i++)
{
if(inodes[index_start].nBlocks[i] != -1)
{
fseek(img,inodes[index_start].nBlocks[i] * SB.SizeBlocks,SEEK_SET);
for(int j = 0; j < SB.SizeBlocks; j++)
fputc('\0',img);
}
}
for(int i = 0; i <3; i++)
{
if(inodes[index_start].nCosBlocks[i] != -1)
{
for(int k = 0; k < 10; k++)
if(inodes[inodes[index_start].nCosBlocks[i]].nBlocks[k]!= -1)
{
fseek(img,inodes[inodes[index_start].nCosBlocks[i]].nBlocks[k] * SB.SizeBlocks,SEEK_SET);
for(int j = 0; j < SB.SizeBlocks; j++) fputc('\0',img);}}}
for(int i = 2; i > -1; i--)
{
if(inodes[index_start].nCosBlocks[i] != -1)
if(inodes[inodes[index_start].nCosBlocks[i]].nBlocks[0]!= -1)
inodes.erase(inodes.begin()+inodes[index_start].nCosBlocks[i]-1);
}
inodes.erase(inodes.begin()+index_start);
fclose(img);
return true;
}
bool FileSystem::Format(char *img_name)
{
img = fopen(img_name,"w");
if(img == NULL)return false;
fseek(img,0,SEEK_SET);
for (int i=0;i<SB.size_FS;i++)
fputc('\0',img);
inodes.erase(inodes.begin(),inodes.end());
return true;
}
Файл «Unix.cpp»
#include "stdafx.h"
#include "FileSystem.h"
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <math.h>
#include <conio.h>
#include <fstream>
using namespace std;
#define VAR 22
ofstream LOGFILE;
HANDLE hThread1,hThread2,hThread3,hThread4,hThread5,hThread6,hThread7,hThread8,hFinalThread;
HANDLE hQuit=NULL;
DWORD id1,id2,id3,id4,id5,id6,id7,id8,idfinal;
double res[9];
HANDLE hSema, hSem;
double IT(double arg)
{
double res=0,step=arg/50,left,right;
for (double i=-arg;i<arg;i+=step)
{
left=fabs(cos(i)*sin(i));
right=fabs(cos(i+step)*sin(i+step));
res+=(left+right)*step/2;
}
return res;
}
double SS(double arg)
{
double res=0;
for (int i=1;i<fabs(arg);i++) res+=fabs(sin((float)i));
return res;
}
DWORD WINAPI Thread1(LPVOID)
{
SYSTEMTIME tTime;
WaitForSingleObject(hSema,INFINITE);
GetLocalTime(&tTime);
LOGFILE <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Создан поток 1;" << endl;
cout<<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Создан поток 1;" << endl;
GetLocalTime(&tTime);
LOGFILE.flush();
ReleaseSemaphore(hSema,1,NULL);
res[0]=IT(VAR*1);
MessageBox(NULL,L"1 поток завершен!",L"Выполнение", MB_TOPMOST);
cout <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Поток 1 завершил свою работу с результатом = " << res[0] << endl;
WaitForSingleObject(hSem,INFINITE);
GetLocalTime(&tTime);
LOGFILE <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Поток 1 завершил свою работу с результатом = " << res[0] << endl;
LOGFILE.flush();
ReleaseSemaphore(hSem,1,NULL);
return 0;
}
DWORD WINAPI Thread2(LPVOID)
{
SYSTEMTIME tTime;
WaitForSingleObject(hSema,INFINITE);
GetLocalTime(&tTime);
LOGFILE <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Создан поток 2;" << endl;
cout <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Создан поток 2;" << endl;
LOGFILE.flush();
ReleaseSemaphore(hSema,1,NULL);
res[1]=IT(VAR*2);
MessageBox(NULL,L"2 поток завершен!",L"Выполнение", MB_OK);
cout <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Поток 2 завершил свою работу с результатом = " << res[1] << endl;
WaitForSingleObject(hSem,INFINITE);
GetLocalTime(&tTime);
LOGFILE <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Поток 2 завершил свою работу с результатом = " << res[1] << endl;
LOGFILE.flush();
ReleaseSemaphore(hSem,1,NULL);
return 0;
}
DWORD WINAPI Thread3(LPVOID)
{
SYSTEMTIME tTime;
WaitForSingleObject(hSema,INFINITE);
GetLocalTime(&tTime);
LOGFILE <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Создан поток 3;" << endl;
cout <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Создан поток 3;" << endl;
LOGFILE.flush();
ReleaseSemaphore(hSema,1,NULL);
res[2]=IT(VAR*3);
MessageBox(NULL,L"3 поток завершен!",L"Выполнение", MB_OK);
cout <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Поток 3 завершил свою работу с результатом = " << res[2] << endl;
WaitForSingleObject(hSem,INFINITE);
GetLocalTime(&tTime);
LOGFILE <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Поток 3 завершил свою работу с результатом = " << res[2] << endl;
LOGFILE.flush();
ReleaseSemaphore(hSem,1,NULL);
return 0;
}
DWORD WINAPI Thread4(LPVOID)
{
SYSTEMTIME tTime;
WaitForSingleObject(hThread3,INFINITE);
WaitForSingleObject(hSema,INFINITE);
GetLocalTime(&tTime);
LOGFILE <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Создан поток 4;" << endl;
cout <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Создан поток 4;" << endl;
LOGFILE.flush();
ReleaseSemaphore(hSema,1,NULL);;
res[3]=IT(res[2]*VAR*4);
MessageBox(NULL,L"4 поток завершен!",L"Выполнение", MB_TOPMOST);
cout <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Поток 4 завершил свою работу с результатом = " << res[3] << endl;
WaitForSingleObject(hSem,INFINITE);
GetLocalTime(&tTime);
LOGFILE <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Поток 4 завершил свою работу с результатом = " << res[3] << endl;
LOGFILE.flush();
ReleaseSemaphore(hSem,1,NULL);
return 0;
}
DWORD WINAPI Thread5(LPVOID)
{
SYSTEMTIME tTime;
WaitForSingleObject(hThread3,INFINITE);
WaitForSingleObject(hSema,INFINITE);
GetLocalTime(&tTime);
LOGFILE <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Создан поток 5;" << endl;
cout <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Создан поток 5;" << endl;
LOGFILE.flush();
ReleaseSemaphore(hSema,1,NULL);
res[4]=IT(res[2]*VAR*5);
MessageBox(NULL,L"5 поток завершен!",L"Выполнение", MB_TOPMOST);
cout <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Поток 5 завершил свою работу с результатом = " << res[4] << endl;
WaitForSingleObject(hSem,INFINITE);
GetLocalTime(&tTime);
LOGFILE <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Поток 5 завершил свою работу с результатом = " << res[4] << endl;
LOGFILE.flush();
ReleaseSemaphore(hSem,1,NULL);
return 0;
}
DWORD WINAPI Thread6(LPVOID)
{
SYSTEMTIME tTime;
WaitForSingleObject(hThread3,INFINITE);
WaitForSingleObject(hSema,INFINITE);
GetLocalTime(&tTime);
LOGFILE <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Создан поток 6;" << endl;
cout <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Создан поток 6;" << endl;
LOGFILE.flush();
ReleaseSemaphore(hSema,1,NULL);
res[5]=IT(res[2]*VAR*6);
MessageBox(NULL,L"6 поток завершен!",L"Выполнение", MB_OK);
cout <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Поток 6 завершил свою работу с результатом = " << res[5] << endl;
WaitForSingleObject(hSem,INFINITE);
GetLocalTime(&tTime);
LOGFILE <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Поток 6 завершил свою работу с результатом = " << res[5] << endl;
LOGFILE.flush();
ReleaseSemaphore(hSem,1,NULL);
return 0;
}
DWORD WINAPI Thread7(LPVOID)
{
SYSTEMTIME tTime;
WaitForSingleObject(hThread1,INFINITE);
WaitForSingleObject(hThread2,INFINITE);
WaitForSingleObject(hSema,INFINITE);
GetLocalTime(&tTime);
LOGFILE <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<<"Создан поток 7;" << endl;
cout <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<<"Создан поток 7;" << endl;
LOGFILE.flush();
ReleaseSemaphore(hSema,1,NULL);
res[6]=SS((res[0]+res[1])*VAR*7);
MessageBox(NULL,L"7 поток завершен!",L"Выполнение", MB_OK);
cout <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Поток 7 завершил свою работу с результатом = " << res[6] << endl;
WaitForSingleObject(hSem,INFINITE);
GetLocalTime(&tTime);
LOGFILE <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Поток 7 завершил свою работу с результатом = " << res[6] << endl;
LOGFILE.flush();
ReleaseSemaphore(hSem,1,NULL);
return 0;
}
DWORD WINAPI Thread8(LPVOID)
{
SYSTEMTIME tTime;
WaitForSingleObject(hThread4,INFINITE);
WaitForSingleObject(hThread5,INFINITE);
WaitForSingleObject(hSema,INFINITE);
GetLocalTime(&tTime);
LOGFILE <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Создан поток 8;" << endl;
cout <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Создан поток 8;" << endl;
LOGFILE.flush();
ReleaseSemaphore(hSema,1,NULL);
res[7]=SS((res[3]+res[4])*VAR*8);
MessageBox(NULL,L"8 поток завершен!",L"Выполнение", MB_OK);
cout <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Поток 8 завершил свою работу с результатом = " << res[7] << endl;
WaitForSingleObject(hSem,INFINITE);
GetLocalTime(&tTime);
LOGFILE <<tTime.wHour<<":"<<tTime.wMinute<<":"<<tTime.wSecond<<" "<< "Поток 8 завершил свою работу с результатом = " << res[7] << endl;
LOGFILE.flush();
ReleaseSemaphore(hSem,1,NULL);
return 0;
}
DWORD WINAPI FinalThread(LPVOID)
{ WaitForSingleObject(hThread6,INFINITE);
WaitForSingleObject(hThread7,INFINITE);
WaitForSingleObject(hThread8,INFINITE);
res[8]=res[5]+res[6]+res[7];
return 0;}
DWORD WINAPI Multi()
{
hQuit=CreateSemaphore(NULL,1,1,L"Semaphore");
if(hQuit == NULL) {
MessageBox(NULL, L"Ошибка при создании семафора", L"Warning",MB_ICONSTOP);
return FALSE; }
if (GetLastError()==ERROR_ALREADY_EXISTS)
{MessageBox(NULL,L"Программа уже используется!",L"Warning",MB_SETFOREGROUND);
return 1;}
LOGFILE.open(L"result.log");
hSema=CreateSemaphore(NULL,1,1,L"Sema");
if(hSema == NULL) {
MessageBox(NULL, L"Ошибка при создании семафора", L"Warning", MB_ICONSTOP);
return FALSE; }
hSem=CreateSemaphore(NULL,1,1,L"Sem");
if(hSem == NULL) {
MessageBox(NULL, L"Ошибка при создании семафора", L"Warning", MB_ICONSTOP);
return FALSE;}
hThread1 = CreateThread(0, 0, Thread1, 0, 0, &id1);
hThread2 = CreateThread(0, 0, Thread2, 0, 0, &id2);
hThread3 = CreateThread(0, 0, Thread3, 0, 0, &id3);
hThread4 = CreateThread(0, 0, Thread4, 0, 0, &id4);
hThread5 = CreateThread(0, 0, Thread5, 0, 0, &id5);
hThread6 = CreateThread(0, 0, Thread6, 0, 0, &id6);
hThread7 = CreateThread(0, 0, Thread7, 0, 0, &id7);
hThread8 = CreateThread(0, 0, Thread8, 0, 0, &id8);
hFinalThread = CreateThread(0, 0, FinalThread, 0, 0, &idfinal);
DWORD tquit = WaitForSingleObject(hFinalThread, 20000);
if (tquit==WAIT_TIMEOUT)
{ MessageBox(NULL,L"Время вышло! Работа прервана!",L"Warning", MB_TOPMOST);
LOGFILE << "Время вышло! Работа прервана!" << endl;
TerminateThread(hThread1,0);
TerminateThread(hThread2,0);
TerminateThread(hThread3,0);
TerminateThread(hThread4,0);
TerminateThread(hThread5,0);
TerminateThread(hThread6,0);
TerminateThread(hThread7,0);
TerminateThread(hThread8,0);
TerminateThread(hFinalThread,0);}
else
{
LOGFILE << "Результат работы программы = " << res[8]<< endl;
cout << "Результат работы программы = " << res[8]<< endl;
}
LOGFILE.flush();
CloseHandle(hQuit);
CloseHandle(hSema);
CloseHandle(hSem);
CloseHandle(hThread1);
CloseHandle(hThread2);
CloseHandle(hThread3);
CloseHandle(hThread4);
CloseHandle(hThread5);
CloseHandle(hThread6);
CloseHandle(hThread7);
CloseHandle(hThread8);
CloseHandle(hFinalThread);
LOGFILE.close();
MessageBox(NULL,L"Программа выполнена!",L"Готово!", MB_TOPMOST);
}
int main()
{
FileSystem FS;
setlocale (LC_ALL, ".1251");
printf("\tUnix-Emulator v.1.0\nCreated by Stulikova N. V.\n\n>");
char c = '1';
while (c != '4')
{
printf(" Реализация эмулятора ФС:\n\n");
printf("1. Тест\n");
printf("2. Работа с ФС\n");
printf("3. Многопоточные вычисления\n");
printf("4. Помощь\n");
printf("0. Выход\n\n");
printf(">> ");
c = _getch();
switch(c)
{
case '0':
exit(0);
case '1':
system ("CLS");
if(FS.Create("fs.img",4096,64) == true)
cout<<"Образ ФС создан! \n";
else cout<<"Не удалось создать образ ФС! \n";
if(FS.CopyFromHDD("fs.img","t1.txt") == true)
cout<<"Файл t1.txt скопирован с диска! \n";
else cout<<"Не удалось скопировать файл t1.txt с диска! \n";
if(FS.CopyFromHDD("fs.img","t2.txt") == true)
cout<<"Файл t2.txt скопирован с диска! \n";
else cout<<"Не удалось скопировать файл t2.txt с диска! \n";
if(FS.CopyFromHDD("fs.img","t3.txt") == true)
cout<<"Файл t3.txt скопирован с диска! \n";
else cout<<"Не удалось скопировать файл t3.txt с диска! \n";
if(FS.CopyFromHDD("fs.img","t4.txt") == true)
cout<<"Файл t4.txt скопирован с диска! \n";
else cout<<"Не удалось скопировать файл t4.txt с диска! \n";
FS.ShowRoot();
if(FS.Delete("fs.img","t2.txt") == true)
cout<<"Файл t2.txt удалён!"<<endl;
else cout<<"Не удалось удалить файл t2.txt! \n";
FS.ShowRoot();
if(FS.CopyToHDD("fs.img","t1_copy.txt","t1.txt") == true)
cout<<"Файл t1_copy.txt скопирован на диск успешно!"<<endl;
else cout<<"Не удалось скопировать файл t1.txt на диск! \n";
if(FS.CopyToHDD("fs.img","t2_copy.txt","t2.txt") == true)
cout<<"Файл t2_copy.txt скопирован на диск успешно!"<<endl;
else cout<<"Не удалось скопировать файл t2.txt на диск! \n";
if(FS.CopyToHDD("pish.img","t4_copy.txt","t4.txt") == true)
cout<<"Файл t4_copy.txt скопирован на диск успешно!"<<endl;
else cout<<"Не удалось скопировать файл t4.txt на диск! \n";
if(FS.Format("fs.img") == true)
cout<<"Форматирование произведено успешно!"<<endl<<endl;
else cout<<"Форматирование не удалось!"<<endl<<endl;
system ("PAUSE");
break;
case '2':
system ("CLS");
while (true)
{
cout<<">";
char command[10];
char nameFS[10];
char namefile[10];
int sizeFS, size;
char open[10]="open";
cin>>command;
if (strcmp(command,"exit") == 0 || strcmp(command,"quit") == 0)
{
return 0;
};
bool C=true;
if (strcmp(command,"create") == 0)
{
cin>>nameFS;
cin>>sizeFS;
cin>>size;
FS.Create(strcat(nameFS,".img"),sizeFS,size);
cout<<"Образ ФС создан! \n";
}
if (strcmp(command,"copyfrom") == 0)
{
cin>>nameFS;
cin>>namefile;
FS.CopyFromHDD(strcat(nameFS,".img"),strcat(namefile,".txt"));
cout<<"Файл "<<namefile<< "скопирован с диска! \n"<<endl;
}
if (strcmp(command,"copyto") == 0)
{
cin>>nameFS;
cin>>namefile;
FS.CopyToHDD(strcat(nameFS,".img"),strcat(strcat(namefile,"_copy"),".txt"),namefile);
cout<<"Файл "<<namefile<<" скопирован на диск успешно!"<<endl;
//FS.CopyToHDD(strcat(nameFS,".img"),"copy.txt",strcat(namefile,".txt"));
//FS.CopyToHDD("pish.img","t1_copy.txt","t1.txt");
}
if (strcmp(command,"del") == 0)
{
cin>>nameFS;
cin>>namefile;
FS.Delete(strcat(nameFS,".img"),strcat(namefile,".txt"));
cout<<"Файл "<<namefile<<" удалён!"<<endl;
}
if (strcmp(command,"format") == 0)
{
cin>>nameFS;
FS.Format(strcat(nameFS,".img"));
cout<<"Форматирование произведено успешно!"<<endl<<endl;
}
if (strcmp(command,"root") == 0)
{
FS.ShowRoot();
}
if (strcmp(command,"mult") == 0)
{
Multi();
}
if (strcmp(command,"help") == 0)
{
cout<<"\tсreate <img_name, int size, int size_blocks> — создаёт файл-образ с именем img_name, размером size, параметр size_blocks — указывает на размер блоков данных файловой системы.\n"<<endl;
cout<<"\tсopyfrom <img_name, file> — копирует в файл-образ с именем img_name файл с жесткого диска с именем file.\n"<<endl;
cout<<"\tcopyto <img_name, file, fileToHDD> — копирует из файла-образа (img_name) файл с именем file на жесткий диск. FileToHDD — задает имя итогового файла.\n"<<endl;
cout<<"\tdel <img_name, file> — удаляет с файла-образа (img_name) файл с именем file.\n"<<endl;
cout<<"\troot- показывает информацию о файловой системе и выводит информацию о файлах содержащихся в ней\n"<<endl;
cout<<"\tformat <img_name> — форматирует файл-образ (img_name)\n"<<endl;
cout<<"\tmult - запустить многопоточные вычисления\n"<<endl;
cout<<"\texit - выход\n";
cout<<endl;
};
}
system ("PAUSE");
break;
case '3':
Multi();