Расширение функционала программного комплекса коллективной разработки для групповой работы с базовыми функциями операционной системы Linux

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    332,08 Кб
  • Опубликовано:
    2012-08-08
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Расширение функционала программного комплекса коллективной разработки для групповой работы с базовыми функциями операционной системы Linux

Оглавление

Техническое задание

Используемые системные вызовы и библиотечные функции

Обработка клавиш Home и End

Функция отображения списка имен файлов правой панели

Функция удаления

Функция перемещения

Функция переименования

Функция выдачи сообщения об ошибке

Порядок создания собственных библиотек

Список использованной литературы:

Скриншоты

Техническое задание

 

Назначение разработки

Наименование темы разработки: «Расширение функционала программного комплекса коллективной разработки для групповой работы с базовыми функциями операционной системы Linux».

Условное обозначение темы разработки: «Программный комплекс».

Программный комплекс предназначен для закрепления практических навыков при изучении дисциплины «Системное программное обеспечение», связанных с изучением системных функций ОС Linux.

Программный комплекс служит базой для реализации высокоуровневых функций файловой системы и системы управления процессами при помощи сервисных средств ОС и стандартных библиотек языка Си.

Требования к программе или программному изделию

Требования к функциональным характеристикам

Доработка программного комплекса состоит в добавлений функций:

)        перемещения\переименования файла для непустых каталогов, вызываемое клавишей F6, в результате чего должно появляться окно, в котором следует указать новое имя и\или расположение файла.

)        удаления одиночных, вызываемой клавишей F8.

)        Навигации с помощью клавишь HOME и END, перемещающих курсор на первый и последний элемент соответственно.

)        интерфейс должен состоять из двух навигационных панелей, в которых справа от имен файлов отображается ID владельца и их типы.

Навигация по содержимому каталогов должна осуществляться с помощью клавиш со стрелками, навигация по каталогам - с помощью клавиши ENTER.

Выход из программы должен осуществляться по нажатию клавиши ESC.

Выходными данными являются элементы отображаемых каталогов.

Исходным каталогом, содержимое которого должно отображаться при запуске системы, должен быть домашний каталог пользователя.

Программный комплекс обладает следующими особенностями:

·        отображение текущего каталога в верхней части панели;

·        вывод о типе текущего элемента каталога в строке статуса (обычный файл, каталог, ссылка, файл устройства);

·        сохранение текущей позиции курсора при смене панелей;

·        игнорирование нажатия клавиш, не входящий в список предопределённых.

·        выдача сообщения об ошибке при попытке входа (чтения) в каталог, при отсутствии соответствующих прав доступа.

·        игнорирование действий пользователя при нажатии на клавишу Enter в том случае, когда текущий элемент не является каталогом.

Требования к надежности

Для обеспечения надёжной работы программ, каждой из них следует:

выполнить обработку ошибок при вызове системных и стандартных библиотечных функций;осуществлять выделение и освобождение памяти при работе со строками и списками.

Условия эксплуатации

Условия эксплуатации программного комплекса совпадают с условиями эксплуатации ПЭВМ IBM PC и совместимых с ними ПК.

Требования к составу и параметрам технических средств

Для работы программного комплекса необходимо наличие IBM PC-совместимого ПК с графическим адаптером EGA (VGA). Требования к объёму дискового пространства и размеру оперативной памяти не превышают требований к базовой ОС Linux.

Требования к информационной и программной совместимости

Программы комплекса должны работать автономно под управлением ОС Linux и удовлетворять требованиям совместимости стандарта POSIX. Исключение - средства библиотеки curses для отображения визуальной информации.

Все вызовы системных функций должны сопровождаться обработкой возможных ошибок.

Базовый язык программирования - C.

«Файловый менеджер» представляет собой одиночную программу, реализующую двух-панельный интерфейс для отображения и навигации по операционной системе Linux.

При работе с элементами каталога в программе «Файловый менеджер» должны использоваться связные списки для обеспечения работы с каталогами любого размера.

При работе со строками следует пользоваться типом char* и осуществлять выделение памяти для строк в динамической области. Освобождение памяти для элементов списка и строк следует производить в той же функции, в которой производилось выделение.

Для ограничения длины строки при отображении имён файлов следует использовать константу максимального размера длины строки.

Для работы с цветом следует использовать константы, типы и переменные библиотеки curses.

Пользовательские программные функции, константы, глобальные переменные и пользовательские типы разместить в отдельных модулях. Указанные модули поместить в статическую библиотеку пользователя.

При реализации обработки нажатия клавиш недопустимые комбинации и отдельные коды должны игнорироваться.

Требования к маркировке и упаковке и требования к транспортированию и хранению

Не требуется

Специальные требования

Специальных требований к временным характеристикам программы не предъявляется.

Специальных требований к ёмкостным характеристикам программы не предъявляется.

Программы комплекса не должны завершаться аварийно при нештатных действиях пользователя - при нажатии клавиш, не входящих в состав предопределённых, при попытке несанкционированного входа в каталоги.

Стадии и этапы разработки

Срок доработки программного комплекса - 3 месяца: с 9.02.2012 по 9.05.2012.

Срок разработки программной документации - 2 месяца: с 9.03.2012 по 9.05.2012.

Исполнитель - студент ФИТ 2-2 Снытко А.С.

Разработка ТЗ и эскизного проекта с 9.02.2012 по 29.03.2012.

Разработка технического проекта с 1.04.2012 по 30.04.2012.

Разработка рабочего проекта с 1.05.2012 по 30.05.2012.

Порядок контроля и приемки

Испытания программного комплекса должны быть проведены на ПК кафедры ЭВМ (лаборатория вычислительной техники, ауд. 239 эн.), работающих под управлением OC Lnux SuSE 12 и Ubuntu 9.04.

Контроль и приемка «Менеджера процессов» должна быть проведена на основе контрольно-отладочных примеров, предусматривающих передачу различных данных между взаимодействующими процессами.

При проведении приёмки программного комплекса проверяется выполнение всех функций программ.

Используемые системные вызовы и библиотечные функции


<DIRENT.H>scandir (const char *dir, struct dirent **namelist, int (*select) (const struct dirent **), int (*compare)(const struct dirent **)) - чтение каталога. Возвращает число элементов в сканируемом каталоге.

const char *dir - каталог для сканирования;

struct dirent **namelist - структура с именами элементов;

int (*select) - функция выбора нужных элементов;

<STRING.H>* strcpy (const char* newstring, const char* oldstring) - копирование строки oldstring в строку newstring.* strcat (const char* instring, const char* outstring) - вставка строки outstring в конец строки instring.

<unistd.h>

<fcntl.h>open(const char *pathname, int flags, mode__t mode) - открытиефайла char *pathname Строка, представляющая имя открываемого файла.

Int flags поразрядное ИЛИ с одной или более констант, определенных в <fcntl.h>.

mode_tmode режимы доступа для создаваемого файла.

Int close()-закрытие файла

<directory.h>

#ifndef DIRECTORY_H_

#define DIRECTORY_H_(char*path);(char*path, char*pathD);

#endif /*DIRECTORY_H_*/.h

#ifndef DRAWLIB_H_

#defineDRAWLIB_H_

//Идентификаторы активной панели

#defineLEFT 0     //метка левой панели

#defineRIGHT 1  //метка правой панели

//Идентификаторы клавиш

#undef KEY_ENTER//переопределение идентефикатора описанного в curses

#defineKEY_ENTER 10//

#defineKEY_ESC 27//определение идентификатора для клавиши Esc

#define KEY_TAB 9

#define WLINES (LINES/4+1)        /* высота */

#define WCOLS (COLS/4*2)          /* ширина */

#defineWy (LINES/3)   /* yверхнеголевогоугланаэкране */

#defineWx (COLS/4)     /* x верхнего левого угла на экране */

//макросы цветовых пар

#define BLUE_BLUE COLOR_PAIR(1)

#define GREEN_BLUE COLOR_PAIR(2)

#define BLUE_WHITE COLOR_PAIR(3)

#define BLACK_WHITE COLOR_PAIR(4)

#define WHITE_BLUE COLOR_PAIR(5)

#define RED_BLUE COLOR_PAIR(6)

#define BLACK_YELLOW COLOR_PAIR(7)

#define YELLOW_BLACK COLOR_PAIR(8)

#define BLACK_CYAN COLOR_PAIR(9)

#define RED_CYAN COLOR_PAIR(10)

#define YELLOW_CYAN COLOR_PAIR(11)

#define BLACK_RED COLOR_PAIR(12)

#define WHITE_RED COLOR_PAIR(13)

#define YELLOW_RED COLOR_PAIR(14)

#define WHITE_CYAN COLOR_PAIR(15)

//Функция получения полного имени файла* getfullname(char* dirname,char* filename);

//Функция очистки панели();();

//Функция отображения панелей псевдографикой

voiddrawframe();

//Функция отображения списка имен файлов панели

void paintdirL(char* path,int n, struct dirent **namelist, int up, int down, int positionkurs);paintdirR(char* path,int n, struct dirent **namelist, int up, int down, int positionkurs);

//Функция вывода сообщения об ошибкеprinterror (const char* text);name(char nn[33]);

#endif /*DRAWLIB_H_*/

Обработка клавиш Home и End:

switch(KEY)

{KEY_HOME:(activepanel)

{LEFT :=scandir(pathL, &namelistL, 0, alphasort);(nL<0) {perror("scandir");endwin();exit(-1);}=1; downL=(LINES-8); positionkursL=1;(pathL,nL,namelistL,upL,downL,positionkursL);;RIGHT :=scandir(pathR, &namelistR, 0, alphasort);(nR<0) {perror("scandir");endwin();exit(-1);}=1;downR=(LINES-8);positionkursR=1;(pathR,nR,namelistR,upR,downR,positionkursR);

};KEY_END:(activepanel)

{LEFT :=scandir(pathL, &namelistL, 0, alphasort);(nL<0) {perror("scandir");endwin();exit(-1);}(j=1;j<nL;j++)

{(positionkursL<nL-1)positionkursL++;(positionkursL>=downL){upL++;downL++;}

}(pathL,nL,namelistL,upL,downL,positionkursL);};

…      }

Функция отображения списка имен файлов правой панели


void paintdirR(char* path,int n, struct dirent **namelist, int up, int down, int positionkurs)

{

struct stat buf;//структура со сведениями о файле

clearR();();(0|BLACK_WHITE);(1,COLS/2+1); printw("~%s",strrchr(path,'/')); numberline;//номера строк, на которых выводятся имена файлов

numberline=4;//первая строка с именнм(down>n) down=n;(int i=up;i<down;i++,numberline++)

{(numberline,COLS/2+2);attrset(0|GREEN_BLUE);(getfullname(path,namelist[i]->d_name),&buf);(S_ISDIR(buf.st_mode)) attrset(A_BOLD|GREEN_BLUE);(i==positionkurs)attrset(A_BOLD|A_UNDERLINE|BLUE_WHITE);("%s",namelist[i]->d_name);(numberline,COLS-18);("Uid:%d", buf.st_uid);(S_ISDIR(buf.st_mode)) printw (" dir");if (S_ISLNK(buf.st_mode)) printw (" link");if (S_ISBLK(buf.st_mode)) printw (" block");if (S_ISREG(buf.st_mode)) printw (" reg");if (S_ISFIFO(buf.st_mode)) printw (" FIFO");printw (" -");(A_BOLD|A_UNDERLINE|BLACK_YELLOW); }

attrset(0|GREEN_BLUE);(LINES-4,COLS/2+1);printw(" name: %s ",namelist[positionkurs]->d_name);();

}

Void paintdirL(char* path,int n, struct dirent **namelist, int up, int down, int positionkurs) - отрисовка левой панели файлового менеджера. Набор параметров и возвращаемое значение аналогичны voidpaintdirR .

Схема алгоритма отображения панели

 

Функция удаления:

 remf(char*path);

Данная функция удаляет выбранный файл или каталог с вложенными в него файлами. При удачном завершении каталог или файл удаляются, иначе выводится окно с ошибкой.

Параметры функции:

Используемые библиотеки: <curses.h><dirent.h><stdlib.h><string.h>

<sys/dir.h><sys/stat.h><unistd.h><errno.h>

Тип возвращаемого значения- целое число.

Возвращаемое значение при ошибке -1.

Исходный код:

#include <…>remdf(char*path)

{*dir;dirent*d;stat buf;(path,&buf);(access(path,R_OK)<0)

{("No right of access!");-1;

}(S_ISDIR(buf.st_mode)!=1)

{(path);0;

}

{(rmdir(path)!=0)

{("DIR is not empty");

}

}

}

Схема алгоритма:


Функция перемещения:

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.

Схема алгоритма

Исходный код:(char*path, char*pathD)

{charbuf[5000];_name[33];file1, file2, skr, skw;*dir;*d;stat tip;(path,&tip);(!S_ISDIR(tip.st_mode))

{ file1=open(path,O_RDONLY,S_IRWXU);(access(path,R_OK)<0)

{if(errno==EACCES)

{printerror("No right of access!");-1; } }(n_name); file2=open((getfullname(pathD,n_name)), O_EXCL|O_CREAT|O_WRONLY,S_IRUSR|S_IWUSR);=read(file1,buf,100);=write(file2,buf,skr);=close(file1);=close(file2);(path);0; }{dir=opendir(path);(access(path,R_OK)<0)

{if(errno==EACCES)

{printerror("No right of access!");-1; } }(n_name);(getfullname(pathD,n_name),S_IRWXU);(path);(dir);((d=readdir(dir))!=NULL)

{ if((strcmp(".",d->d_name)==0)||(strcmp("..",d->d_name)==0)) continue;=open(d->d_name,O_RDONLY,S_IRWXU);=open(getfullname(getfullname(pathD,n_name),d->d_name),O_EXCL|O_CREAT|O_WRONLY,S_IRUSR|S_IWUSR);=read(file1,buf,100);=write(file2,buf,skr);=close(file1);skr=close(file2);unlink(d->d_name); }(dir);chdir("..");(path);return 0; }}

Функция переименования:

библиотека программный файл переименование

void name(char nn[33]);

Функция переименования. При вызове появляется окно с вводом информации.

Используемые библиотеки: данные функции находятся в файле drawlib.cpp поэтому библиотеки там уже были подключены заранее

Тип возвращаемого значения - void.

Схема алгоритма


Исходный код:name(char nn[33])

{WINDOW*w;char*namewin="Move/Rename";=newwin(WLINES,WCOLS,Wy+1,Wx+1);(w);wattrset(w,COLOR_PAIR(10));werase(w);box(w,0,0);(w,0,(WCOLS-strlen(namewin))/2);wattrset(w,COLOR_PAIR(12));(w," %s ",namewin);wattrset(w,COLOR_PAIR(10));(inti=1;i<=(WCOLS-2);i++)(int j=1;j<=(WCOLS-2);j++)(w,j,i," ");mvwaddstr(w,WLINES/2-2,(WCOLS-16)/2,"Input new name");(w,COLOR_PAIR(10));mvwaddstr(w,WLINES/2+2,(WCOLS-2)/2,"OK");(w,COLOR_PAIR(4));for(inti=3;i<=(WCOLS-4);i++)(w,WLINES/2,i," ");wmove(w,WLINES/2,3);echo();_set(1);wgetstr(w,nn);noecho();curs_set(0);delwin(w);

}

Функция выдачи сообщения об ошибке:

void printerror(const char* text);

Функция выводит окно с ошибкой.

Используемые библиотеки: данные функции находятся в файле drawlib.cpp поэтому библиотеки там уже были подключены заранее

Тип возвращаемого значения - void.

Исходный код:

void printerror(const char* text)

{*w; beep();= newwin( WLINES, WCOLS, Wy+1, Wx+1);(); curs_set(0); wrefresh(w);(w,A_BOLD|COLOR_PAIR(8));(w);(w,0,0);(w,0,(WCOLS-8)/2);(w,A_BOLD|COLOR_PAIR(9));( w, " ERROR " );(w,A_BOLD|COLOR_PAIR(7));(inti=1;i<=WCOLS-2;i++)(int j=1;j<=WLINES-2;j++)

{mvwaddstr(w,j,i," "); }(w);//отобразить stdscr(w, A_BOLD|COLOR_PAIR(8));(w,WLINES/2-1,(WCOLS-strlen(text))/2, text);(w,A_BOLD|A_UNDERLINE|COLOR_PAIR(9));(w,WLINES/2+1,(WCOLS-2)/2, "OK");(w);( w, TRUE );(1)

{(wgetch(w))

{KEY_ESC:10: goto out;

} }:(w);();}

newwin - создаёт новое окно

mvwaddstr - добавляет строку в новой позиции в окне

wrefresh - обновляет окно экрана терминала

wattrset - установка атрибутов окна

wmove - перемещение позиции вывода

Одна функция curses может иметь две или более версий.

w Обозначает функцию, для которой в качестве аргумента должно быть задано окно.

p Обозначает функцию, для которой в качестве аргумента должна быть задана панель.

mv Обозначает функцию перехода к указанным координатам.

 

Порядок создания собственных библиотек


Для создания библиотеки были использованы следующие файлы:

cutf.cpp, remf.cpp - исходный файл C++, содержит собственные функции.

drawlib.cpp - исходный файл C++, содержит изменённые функции исходной программы.

directory.h - заголовочный файл для cutf.cpp, remf.cpp

Откомпилировать name.cpp для получения объектного модуля name.o

gcc -c cutf.cpp

gcc -c remf.cpp

Откомпилировать drawlib.cpp для получения объектного модуля drawlib.o

gcc -c drawlib.cpp

Полученные объектные модули архивируются в библиотеку libmaked.a:

ar -r libmaked.a cutf.o remf.o-r libdraw.a drawlib.o

Библиотека создана. Для подключения её к программе при компиляции необходимо указать:

ключ L, аргумент которого - путь к текущему каталогу;

ключ l с именем библиотеки без букв lib.

gcc shablon.cpp -o shablon -lncurses -L/home/kurs -ldraw -lmaked

Список использованной литературы:


.        А. Робачевский. Операционная система UNIX. -СПб.:БХВ-Петербург, 2010.

2.      Методические указания к выполнению курсовой работы по дисциплине “Системное программное обеспечение“ - Новочеркасск, 2012 г.

3.      Справочная система интернет ресурса«openNET» #"552522.files/image005.gif">

Попытка открыть папку не имея доступа

Похожие работы на - Расширение функционала программного комплекса коллективной разработки для групповой работы с базовыми функциями операционной системы Linux

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!