Курсовая работа: Програма емуляції роботи командного процесора операційної системи
3. Ріжемо стрічку по пробілам до кінця. Перше слово – команда, яку необхідно виконати, іші – аргументи функції.
4. У структурі CommandLIST шукаємо номер введеної команди і присвоюємо його змінній cmd.
5. Відповідно до номера команди виконуємо функції. Якщо 0 то виводимо повідомлення, що введена невідома команда, 1 – завершуємо виконання програми, 2 – виводимо допоміжну інформацію по програмі, 3-6 виконуємо відповідні функуції згідно структури CommandLIST.
3.2 Опис системних функцій
Join
Для реалізації команди join потрібно відкрити перший файл скопіювати його вміст в буфер, створивши новий файл копіюємо в нього вміст буфера. Після цього відкриваємо другий файл копіюємо його вміст в буфер, після чого копіюємо вміст буфера в створений файл, при цьому продовжуючи інформацію від першого файлу. Для реалізації даної команди використані такі функції як: fopen, fclose, fread, fwrite, fflush.
Ar
В даній команді реалізовано наступний підхід: ми використовуємо функцію мови С++ spawnl або system, які дозволяють запускати на виконання зовнішні програми з нашої. Потім, передаємо архіватору необхідні команди і виконуємо вказану дію, інформуючи користувача.
Edit
Дана команда виконує функцію створення файлу. Для цього їй потрібно відкрити файл із заданою назвою, зчитати його зміст, а якщо він не існує то створити його. Після чого відбувається емуляція текстового редактора і обробляються команди користувача. При натисненні клавіші Tab користувачем, файл зберігається, включаючи зміни. Для реалізації даної команди використані такі функції як: fopen (відкриває потік і зв’язує з цим потоком визначений файл), fseek ( функція яка виконує операції прямого доступу до файлу), fclose ( закриває потік, відкритий функцією fopen), ftell (повертає поточне значення показника поточній позиції ф файлі), putc (записує символ в файл), getc ( функція зчитує символ з файлу).
Split
Формат команди за технічним завданням повинен мати наступний вигляд:
Після аналізу команд, дана підпрограма проводить аналіз існування вхідного файлу. У випадку, якщо даний файл існує, він відкривається для читання, і виконується подальший алгоритм його обробки. Інакше, якщо файл не існує, виводиться інформація про не існування даного файлу, і підпрограма припиняє своє виконання.
У випадку, якщо файл знайдено і відкрито, відкриваються два вихідних файл для запису. У випадку, якщо файли не існували, вони будуть створені програмою, однак якщо вони вже були створені, то необхідно бути обережним, оскільки вони будуть цілком перезаписаними програмою, і всі попередні дані будуть втраченими.
Опис функцій які використовувались при написанні програми.
Функція fopen
Функція fopen ( ) відкриває потік і пов'язує з цим потоком певний файл. Потім вона повертає покажчик цього файлу. Найчастіше під файлом мається на увазі дисковий файл. Прототип функції fopen () такий:
FILE *fopen(const char *імя_файла, const char *режим)
де ім’я файла — це покажчик на рядок символів, що є допустимим ім'ям файлу, в яке також може входити специфікація шляху до цього файлу. Рядок, на яку вказує режим, визначає, яким чином файл буде відкритий.
Функція fopen () повертає покажчик файлу.
Функція fclose
Функція fclose () закриває потік, який був відкритий за допомогою виклику fopen (). Функція fclose () записує у файл всі дані, які ще залишалися в дисковому буфері, і проводить офіційне закриття файлу на рівні операційної системи. Відмова при закритті потоку несе всілякі неприємності, включаючи втрату даних, зіпсовані файли і можливі періодичні помилки в програмі. Функція fcloseO також звільняє блок управління файлом, пов'язаний з цим потоком, даючи можливість використовувати цей блок знову. Оскільки кількість одночасно відкритих файлів обмежена, то, можливо, доведеться закривати один файл, перш ніж відкривати інший. Прототип функції f close () такий:
int fclose(FILE *пф);
пф — покажчик файлу, повернений в результаті виклику fopen (). Повернення нуля означає успішну операцію закриття. У разі ж помилки повертається EOF.
Щоб точно взнати, в чому причина цієї помилки, можна використовувати стандартну функцію ferror (). Звично відмова при виконанні fclose () відбувається тільки тоді, коли диск був передчасно видалений (стертий) з дисковода або на диску не залишилося вільного місця.
Функція putc ()
У системі введення/виведення мови С++ визначаються дві еквівалентні функції, призначені для виведення символів: putc () і fputc (). (Насправді putc () зазвичай реалізується у вигляді макросу).
Функція putc () записує символи у файл, який за допомогою fopen () вже відкритий в режимі запису. Прототип цієї функції наступний:
int putc(int ch, FILE *пф);