Методические указания по выполнению курсовых работ по дисциплине «Системное программное обеспечение» для студентов, обучающихся по специальностям 210100, 210200 и направлению 550200 icon

Методические указания по выполнению курсовых работ по дисциплине «Системное программное обеспечение» для студентов, обучающихся по специальностям 210100, 210200 и направлению 550200


Смотрите также:
Методические указания по выполнению курсовых работ по дисциплине «Системное программное...
В. И. Харитонов > К. И. Меша Одобрено методической > С. С...
Методические указания по выполнению, представлению и защите курсовых работ для специальности...
Методические указания по выполнению курсовых работ по дисциплине «Экономический анализ» для...
Методические указания к выполнению лабораторных работ по курсам «Технические средства...
Методические указания к выполнению курсовой и лабораторных работ по дисциплине «Системное...
Методические указания по выполнению курсовых работ для студентов всех форм обучения...
Методические указания по выполнению курсовых работ для студентов специальности спо 032002...
Методические указания по выполнению контрольных работ для студентов...
Методические рекомендации к выполнению курсовых работ по дисциплине «Документоведение»...
Методические указания по выполнению курсовых работ для студентов III курса...
Методические рекомендации по выполнению курсовых работ по дисциплине «Экономическая теория»...



Загрузка...
страницы: 1   2   3   4
вернуться в начало
скачать
^

Системный вызов сlose


Системный вызов сlose (закрыть файл) имеет следующий формат:

аns = сlоsе (fd)

int fd;

Системный вызов сlosе удаляет дескриптор fd из таблицы дескрипторов открытых файлов процесса. Если удаленный дескриптор был последним ссылающимся на данный файл, то весь контекст работы с файлом теряется. Для обычного файла это указатель позиции чтения/записи и режим блокировки. Хотя, при завершении процесса, все открытые им файлы автоматически закрываются, число одновременно открытых файлов ограничено, поэтому данный вызов может оказаться необходимым для программ, работающих с большим количеством файлов.

При порождении нового процесса (см описание вызова fork) все его дескрипторы указывают на те же объекты, что и дескрипторы процесса-предка. После выполнения вызова ехесvе в порожденном процессе, новая программа также наследует все активные дескрипторы. Для того, чтобы сделать недоступными новой программе уже открытые файлы, соответствующие дескрипторы можно переопределить с помощью dup2 или удалить с помощью системного вызова unlink. Однако бывают ситуации, в которых уже открытые файлы могут потребоваться при неудачном завершении системного вызова execvе. В таких случаях, применение вызова fcntl обеспечивает закрытие определенных файлов после успешного старта новой программы. В случае успешного завершения, системный вызов с1оsе возвращает значение 0, иначе - значение -1 и код ошибки в переменной еrrnо. Код ошибки:

[ЕВАDF] - указанный дескриптор не является дескриптором открытого файла.

^ Системный вызов lsееk

Системный вызов lsееk (установка указателя чтения/записи) имеет следующий формат:

#define L_SЕТ 0 /* установка * /

# define L_INCR 1 /* смещение */

# define L_ХТND 2 /* увеличение размера файла */

long lseek (fd, offset, whence)

int fd, whence;

long offset;

Системный вызов lsееk изменяет значение указателя позиции чтения/записи дескриптора fd следующим образом: если значение параметра whence равно L_SЕТ, то указателю присваивается значение параметра, если значение параметра whence равно L_INCR, значение указателя увеличивается .на значение offset, если значение параметра whence равно L_XTND, то указателю присваивается значение (offset + fsize), где fsize- размер файла.

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

В случае успешного завершения, вызов lseek возвращает значение указателя текущей позиции чтения/записи (целое положительное число), определяющее смещение от начала файла (в байтах).

При возникновении ошибки, возвращается значение -1 и код ошибки в переменной еrrnо, которая может принимать следующие значения:

[ЕВАDF] - некорректный дескриптор файла;

[ЕSРIРЕ] - дескриптор относится не к файлу, а к программному каналу или файлу типа "гнездо";

[ЕINVAL] - недопустимое значение параметра.
^

4.2 Управление оперативной памятью



Изучение возможностей языка программирования С/С++ для обращения к ячейкам оперативной памяти, управления ОП.

Указатели на простые переменные


Указатель - это адрес памяти, распределяемой для размещения идентификатора (в качестве идентификатора может выступать имя переменной, массива, структуры, строкового литерала). В том случае, если переменная объявлена как указатель, то она содержит адрес памяти, по которому может находиться скалярная величина любого типа. При объявлении переменной типа указатель, необходимо определить тип объекта данных, адрес которых будет содержать переменная, и имя указателя с предшествующей звездочкой (или группой звездочек). Формат объявления указателя: спецификатор-типа [ модификатор ] * описатель

Спецификатор-типа задает тип объекта и может быть любого основного типа, типа структуры, смеси. Задавая вместо спецификатора-типа ключевое слово void, можно своеобразным образом отсрочить спецификацию типа, на который ссылается указатель. Переменная, объявляемая как указатель на тип void, может быть использована для ссылки на объект любого типа. Однако для того, чтобы можно было выполнить арифметические и логические операции над указателями или над объектами, на которые они указывают, необходимо при выполнении каждой операции явно определить тип объектов. Такие определения типов может быть выполнено с помощью операции приведения типов.

В качестве модификаторов при объявлении указателя могут выступать ключевые слова const, near, far, huge. Ключевое слово const указывает, что указатель не может быть изменен в программе. Размер переменной объявленной как указатель, зависит от архитектуры компьютера и от используемой модели памяти, для которой будет компилироваться программа. Указатели на различные типы данных не обязательно должны иметь одинаковую длину.

Для модификации размера указателя можно использовать ключевые слова near, far, huge.

Примеры:

unsigned int * a; // переменная а представляет собой указатель

// на тип unsigned int (целые числа без знака)

double * x; // переменная х указывает на тип данных с

// плавающей точкой удвоенной точности //

char * fuffer ; // объявляется указатель с именем fuffer,

// который указывает на переменную типа char

double nomer;

void *addres;

addres = & nomer;

(double *)addres ++;

Переменная addres объявлена как указатель на объект любого типа. Поэтому ей можно присвоить адрес любого объекта (& - операция вычисления адреса). Однако, как было отмечено выше, ни одна арифметическая операция не может быть выполнена над указателем, пока не будет явно определен тип данных, на которые он указывает. Это можно сделать, используя операцию приведения типа (double *) для преобразования addres к указателю на тип double, а затем увеличение адреса.

const * dr;

Переменная dr объявлена как указатель на константное выражение, т.е. значение указателя может изменяться в процессе выполнения программы, а величина, на которую он указывает, нет.

unsigned char * const w = &obj.

Переменная w объявлена как константный указатель на данные типа char unsigned. Это означает, что на протяжении всей программы w будет указывать на одну и ту же область памяти. Содержание же этой области может быть изменено.

Указатель на величину одного типа может быть преобразован к указателю на величину другого типа. Однако результат может быть не определен из-за отличий в требованиях к выравниванию и размерах для различных типов.

Указатель на тип void может быть преобразован к указателю на любой тип, и указатель на любой тип может быть преобразован к указателю на тип void без ограничений. Значение указателя может быть преобразовано к целой величине. Метод преобразования зависит от размера указателя и размера целого типа следующим образом:

- если размер указателя меньше размера целого типа или равен ему, то указатель преобразуется точно так же, как целое без знака;

- если указатель больше, чем размер целого типа, то указатель сначала преобразуется к указателю с тем же размером, что и целый тип, и затем преобразуется к целому типу.

Целый тип может быть преобразован к адресному типу по следующим правилам:

- если целый тип того же размера, что и указатель, то целая величина просто рассматривается как указатель (целое без знака);

- если размер целого типа отличен от размера указателя, то целый тип сначала преобразуется к размеру указателя (используются способы преобразования, описанные выше), а затем полученное значение трактуется как указатель.




оставить комментарий
страница3/4
Дата23.01.2012
Размер0,67 Mb.
ТипМетодические указания, Образовательные материалы
Добавить документ в свой блог или на сайт

страницы: 1   2   3   4
отлично
  1
Ваша оценка:
Разместите кнопку на своём сайте или блоге:
rudocs.exdat.com

Загрузка...
База данных защищена авторским правом ©exdat 2000-2017
При копировании материала укажите ссылку
обратиться к администрации
Анализ
Справочники
Сценарии
Рефераты
Курсовые работы
Авторефераты
Программы
Методички
Документы
Понятия

опубликовать
Загрузка...
Документы

Рейтинг@Mail.ru
наверх