- •Техническое задание Назначение разработки
- •Требования к программе или программному изделию
- •Стадии и этапы разработки
- •Порядок контроля и приемки
- •Используемые системные вызовы и библиотечные функции:
- •Обработка клавиш Home и End:
- •Функция отображения списка имен файлов правой панели
- •Функция удаления:
- •Функция перемещения:
- •Функция переименования:
- •Функция выдачи сообщения об ошибке:
- •Порядок создания собственных библиотек :
- •Список использованной литературы:
- •Методические указания к выполнению курсовой работы по дисциплине “Системное программное обеспечение“ – Новочеркасск, 2012 г.
- •Скриншоты
Функция перемещения:
int cutf(char*path, char*pathD);
Функция перемещения файла, либо каталога с вложенными в него файлами. При вызове появляется окно с вводом нового имени, а после файл или каталог перемещаются по заданному пути в соседней панели. При неудачном завершении появится окно с ошибкой.
charbuf[5000] – буфер для чтения/записи;
charn_name[33] – буфер для нового имени;
int file1, file2 – дескрипторыфайлов;
intskr, skw – переменные для чтения/записи;
DIR*dir – каталог;
structdirentd – структура для чтения каталога;
structstattip – структура для получения информации о файлах.
Параметры функции:
char* path – путь к текущему объекту;
char* pathD – новый путь к объекту;
Используемые библиотеки: <fcntl.h><curses.h><dirent.h><stdlib.h><string.h><sys/dir.h><sys/stat.h><unistd.h><errno.h>
Тип возвращаемого значения - целое число.
Возвращаемое значение при ошибке -1.
Схема алгоритма
Исходный код:
intcutf(char*path, char*pathD)
{charbuf[5000];
charn_name[33];
int file1, file2, skr, skw;
DIR*dir;
structdirent*d;
struct stat tip;
stat(path,&tip);
if(!S_ISDIR(tip.st_mode))
{ file1=open(path,O_RDONLY,S_IRWXU);
if(access(path,R_OK)<0)
{if(errno==EACCES)
{printerror("No right of access!");
return -1; } }
name(n_name); file2=open((getfullname(pathD,n_name)), O_EXCL|O_CREAT|O_WRONLY,S_IRUSR|S_IWUSR);
skr=read(file1,buf,100);
skw=write(file2,buf,skr);
skr=close(file1);
skw=close(file2);
unlink(path);
return 0; }
else {dir=opendir(path);
if(access(path,R_OK)<0)
{if(errno==EACCES)
{printerror("No right of access!");
return -1; } }
name(n_name);
mkdir(getfullname(pathD,n_name),S_IRWXU);
chdir(path);
rewinddir(dir);
while((d=readdir(dir))!=NULL)
{ if((strcmp(".",d->d_name)==0)||(strcmp("..",d->d_name)==0)) continue;
file1=open(d->d_name,O_RDONLY,S_IRWXU);
file2=open(getfullname(getfullname(pathD,n_name),d->d_name),O_EXCL|O_CREAT|O_WRONLY,S_IRUSR|S_IWUSR);
skr=read(file1,buf,100);
skw=write(file2,buf,skr);
skr=close(file1);skr=close(file2);unlink(d->d_name); }
closedir(dir);chdir("..");
rmdir(path);return 0; }}
Функция переименования:
void name(char nn[33]);
Функция переименования. При вызове появляется окно с вводом информации.
Используемые библиотеки: данные функции находятся в файле drawlib.cpp поэтому библиотеки там уже были подключены заранее
Тип возвращаемого значения - void.
Схема алгоритма
Исходный код:
void name(char nn[33])
{WINDOW*w;
const char*namewin="Move/Rename";
w=newwin(WLINES,WCOLS,Wy+1,Wx+1);
wrefresh(w);wattrset(w,COLOR_PAIR(10));werase(w);box(w,0,0);
wmove(w,0,(WCOLS-strlen(namewin))/2);wattrset(w,COLOR_PAIR(12));
wprintw(w," %s ",namewin);wattrset(w,COLOR_PAIR(10));
for(inti=1;i<=(WCOLS-2);i++)
for(int j=1;j<=(WCOLS-2);j++)
mvwaddstr(w,j,i," ");mvwaddstr(w,WLINES/2-2,(WCOLS-16)/2,"Input new name");
wattrset(w,COLOR_PAIR(10));mvwaddstr(w,WLINES/2+2,(WCOLS-2)/2,"OK");
wattrset(w,COLOR_PAIR(4));for(inti=3;i<=(WCOLS-4);i++)
mvwaddstr(w,WLINES/2,i," ");wmove(w,WLINES/2,3);echo();
curs_set(1);wgetstr(w,nn);noecho();curs_set(0);delwin(w);
}