Програма емуляції роботи командного процесора операційної системи

Автор: Пользователь скрыл имя, 20 Ноября 2012 в 22:41, курсовая работа

Описание работы

Сучасні відкриті операційні системи, такі як Linux або OPENBSD походять від операційної системи UNIX, що з’явилася на початку 1970-х років і зробила величезний вплив на практичні реалізації операційних систем і розвиток всієї області інформаційних технологій. Тому вивчення будь-якою з сучасних UNIX-подібних операційних систем неможливо без розгляду основних ідей, закладених в оригінальний UNIX.

Работа содержит 1 файл

Kyrs.doc

— 446.00 Кб (Скачать)

Функція fclose ( ) закриває потік, який був відкритий за допомогою  виклику fopen ( ). Функція fclose ( ) записує  у файл всі дані, які ще залишалися в  дисковому буфері, і проводить  офіційне закриття файлу на рівні  операційної системи. Відмова при закритті потоку несе всілякі неприємності, включаючи   втрату  даних,   зіпсовані   файли  і   можливі   періодичні помилки в програмі. Функція fclose ( )  також звільняє блок управління файлом, пов'язаний з цим потоком, даючи можливість використовувати цей блок знову. Оскільки кількість одночасно відкритих файлів обмежена, то, можливо, доведеться закривати один файл, перш ніж відкривати інший. Прототип функції fclose ( )   такий:

int fclose (FILE *pf);

pf — покажчик файлу,  повернений в результаті виклику fopen ( ).

Повернення  нуля означає успішну операцію закриття. У разі ж помилки

повертається EOF.

Щоб  дізнатись, в чому причина цієї помилки, можна використовувати  стандартну функцію ferror ( ). Звично відмова  при виконанні fclose ( ) відбувається тільки тоді, коли диск був передчасно видалений (стертий) з дисковода або на диску не залишилося вільного місця.

Функція putc ( ) 

У системі введення/виведення  мови С визначаються дві еквівалентні функції, призначені для виведення  символів: putc ( ) і fputc ( ). (Насправді putc ( ) зазвичай реалізується у вигляді макросу).

Функція putc ( )  записує  символи у файл, який за допомогою fopen ( )  вже відкритий в режимі запису. Прототип цієї функції наступний:

int putc (int ch, FILE *fp);

fp — це покажчик на потік файлу, а ch — символ, що виводиться в потік. Покажчик файлу повідомляє putc ( ), в якій саме файл слід записувати символ. Хоча ch і визначається як int, проте записується тільки молодший байт. Якщо функція putc ( ) виконалася успішно, то повертається записаний символ. У протилежному  випадку повертається EOF.

Функція getc ( ) 

Для   введення   символу   також   є   дві   еквівалентні   функції:  

getc ( ) і fgetc ( ). Обидві  визначаються для збереження  сумісності із старими версіями  С++.

Функція getc ( ) записує символи у файл, який за допомогою fopen ( )  вже відкритий в режимі для читання. Прототип цієї функції наступний:

int getc (FILE *fp);

fp —  це  покажчик  файлу,   що має  тип   FILE   і  повернений  функцією fopen ( ). Функція getc ( )  повертає ціле значення, але символ знаходиться в молодшому байті. Якщо не відбулася помилка, то старший байт (байти) буде обнулений.  Якщо досягнутий кінець файлу, то функція getc ( ) повертає EOF (end of file).

Функція fseek ( ) 

int fseek (FILE *stream,long offset,int whence);

fseek установлює вказівник файлу, зв'язаний с потоком stream, у нову позицію, що зміщена на offset байт щодо місця в файлі, обумовленого параметром whence. Для потоків у текстовому режимі параметр offset повинний бути дорівнює 0 чи значенням, що повертається ftell. Параметр whence повинний бути однієї з величин: 0, 1 чи 2, що представлені трьома символічними константами (визначеними в stdio.h) у таблиці 2.

Таблиця 2 – Символічні константи whence

whence

Розміщення  у файлі

SEEK_SET (0)

Початок файлу

SEEK_CUR (1)

Поточне положення покажчика  файлу

SEEK_END (2)

Кінець файлу


 

fseek відкидає будь-як  символ, повернутий з використанням  ungetc. fseek використовується з потоковими  операціями введення-виведення.

Після fseek наступна операція по обміні з файлом може бути як введенням, так і виведенням.

Функція ftell

Повертає поточний вказівник  файлу. Точніше кажучи повертає вказівник  файлу для потоку. Функція ftell, яка  повертає вказівник може використовуватись  в наступному запиті до функції fseek.  При успішній роботі функція повертає поточне положення вказівника файлу. При помилці повертає – 1. FILE *stream – вказується назва файлу, тобто файл якому потрібно повернути вказівник.

ftell (FILE *stream);

Функція rewind ( )

void rewind (FILE *stream);

rewind еквівалентна fseek (stream,0L, SEEK_SET) за винятком того, що функція rewind очищає ознаки кінця файлу і помилки, а функція fseek очищує тільки ознаку кінця файлу. Після виклику rewind наступною операцією над файлом може бути або введення, або виведення.

Функція coreleft ( )

Повертає розмір вільної  оперативної пам'яті в крихітній (tiny), маленькій (small) та в середній (medium) моделях пам'яті:

             #include <alloc.h>

             unsigned coreleft (void);

в компактній (compact), великій (large) та дуже великій (huge) моделях пам'яті:

             #include <alloc.h>

             unsigned long coreleft (void);

Функція farcoreleft  ( )

Повертає розмір вільної  пам'яті в купі з далекою адресацією:

             #include <alloc.h>

             unsigned long farcoreleft (void);

Функція strlen ( )

Функція strlen повертає в байтах довжину рядка string, причому нульовий символ закінчення ('0') в довжину не зараховується.

int strlen (string);

char *string;  – рядок, який закінчується нульовим символом.

Приклад:

#include < string .h>

char *string="some space";

int result;

.

.

/* визначає довжину  рядка */

result=strlen(string); /* result = 10 */

 

Функція strncpy ( )

char * strncpy ( char * destination, const char * source, size_t num );

Функція strncpy ( ) копіює не більше count символів з рядка, що адресується параметром str2, в масив, що адресуються параметром str. Параметр str2 повинен вказувати на рядок, який закінчується символом кінця рядка.

Якщо задані  масиви  символів перекриваються, поведінка  функції strncpy ( ) не визначена.

Якщо довжина рядка, який адресується параметром str2, менше значення count, то в кінці рядка-результату str1 додаються "відсутні" нульові символи.

Якщо ж довжина   рядка, який   адресується   параметром str2, більше значення count, то рядок-результат, який адресується  параметром str1,  не буде закінчуватися  символом кінця рядка.

Приклад:

#include <stdio.h>

#include <string.h>

int main ( )

{

  char str1[ ]= "To be or not to be";

  char str2[6];

  strncpy (str2,str1,5);

  str2[5]='\0';

  puts (str2);

  return 0;

}

Функція strcat ( )

strcat, strncat – об’єднання двох рядків

char*strcat (char *string1, constchar *string2); 

Опції strcat, strncat працюють з рядками, що закінчуються '0' символом. Аргументи рядків для цих функцій припускають наявність нульового символу ('0'), який вказує на кінець рядка. При додаванні рядків перевірка на переповнення не виконується.

Функція strcat додає string2 до string1, закінчує результативний рядок нульовим символом і повертає вказівник на рядок-приймач (string1).

Функція ftell ( )

long ftell (stream);

FILE * stream; – покажчик на структуру FILE.

Функція ftell отримує поточну позицію покажчика на файл (якщо він є), пов'язаного з потоком stream. Позиція виражається як зміщення offset від початку потоку stream. Ця функція повертає поточну позицію. У разі помилки повертається значення -1.

Щоб коректно запам'ятати і відновити місця розташування вказівника на файл використовується функція ftell разом з fseek.

Приклад:

# include <stdio.h>

FILE * stream;

long position;

stream = fopen ( "data", "rb");

.

.

position = fteel (stream);

Функція strlwr ( )

char strlwr (string);

char *string;

Функція strlwr перетворює будь-які літери верхнього регістру із заданого рядка string, що закінчується нульовим символом, у літери нижнього регістру. Інші символи не розглядаються.

Функція strlwr повертає вказівник на що перетворюється рядок  
string. Значення, що повертається у разі помилки немає.

Приклад:

# include <string.h>

char string [100], * copy;

.

.

/ * Створює копію рядка у символи нижнього регістра * /

copy = strlwr (strdup (string));  

 

ВИСНОВОК

 

В даному курсовому проекті  була розроблена програма емуляції роботи командного процесора операційної системи. Ця програма містить точку входу в програму, головний нескінченний інтерактивний цикл очікування дії користувача, модуль аналізу дій користувача, модулі команд. Дана програма виконує такі команди як: ділення файлу навпіл (команда “split”), виведення поточного шляху до програми (команда “path”), визначення кількості вільного місця в оперативній пам’яті (команда “mem”), виведення вмісту каталогу (команда “dir”).

Переконалася, що хоча мова C++ відповідає по своїй структурі апаратним можливостям багатьох комп'ютерів, вона не прив'язана до якої-небудь конкретної машинної архітектури. При деякій старанності на ній легко написати повністю переносну програму, тобто програму, яка працюватиме без жодних змін на самих різних комп'ютерах. Мові C++ не властивий строгий контроль типів, хоча у міру його еволюції розвивалися засоби перевірки відповідності типів.

 І хоча C++ називають “мовою системного програмування”, оскільки на ній зручно писати компілятори і операційні системи, вона така ж зручна і для написання великих прикладних програм в самих різних областях застосування.

Під час даної роботи був одержаний цінний досвід по написанню  програм на мові програмування С++ і Assembler, також були закріплені знання одержані на заняттях.

 

 

ЛІТЕРАТУРА

 

  1. В.В. Подбельский. Язык C++: Учебное пособие. - Москва: Финансы и статистика, 1995. 560с.
  2. Джесс Либерти . Освой Самостоятельно C++ за 21 день.
  3. Джесс Либерти . C++ Энциклопедия Пользователя.
  4. Стенли Б. Липпман. C++ для начинающих: Пер. с англ. 2тт. - Москва: Унитех; Рязань: Гэлион, 1992, 304-345сс.
  5. Язык С++ в cистеме UNIX. Богатырёв, 1996.
  6. Мюррэй Хилл & Нью Джерси. Язык C++. 

 

 


Информация о работе Програма емуляції роботи командного процесора операційної системи