Архитектура операционной системы UNIX


         

УПРАЖНЕНИЯ - часть 6


27. Что произойдет в процессе выполнения программы, представленной на ? Поясните свой ответ.

main() { char *endpt; char *sbrk(); int brk();

endpt = sbrk(0); printf("endpt = %ud после sbrk\n", (int) endpt);

while (endpt--) { if (brk(endpt) == -1) { printf("brk с параметром %ud завершилась неудачно\n",endpt); exit(); } } }

Рисунок 7.38

28. Библиотечная подпрограмма malloc увеличивает область данных процесса с помощью функции brk, а подпрограмма free освобождает память, выделенную подпрограммой malloc. Синтаксис вызова подпрограмм: ptr = malloc(size); free(ptr);

где size - целое число без знака, обозначающее количество выделяемых байт памяти, а ptr - символьная ссылка на вновь выделенное пространство. Прежде чем появиться в качестве параметра в вызове подпрограммы free, указатель ptr должен быть возвращен подпрограммой malloc. Выполните эти подпрограммы.

29. Что произойдет в процессе выполнения программы, представленной на ? Сравните результаты выполнения этой программы с результатами, предусмотренными в системном описании.

main() { int i; char *cp; extern char *sbrk();

cp = sbrk(10); for (i = 0; i < 10; i++) *cp++ = 'a' + i; sbrk(-10); cp = sbrk(10); for (i = 0; i < 10; i++) printf("char %d = '%c'\n",i,*cp++); }

Рисунок 7.39. Пример программы, использующей подпрограмму sbrk

30. Каким образом командный процессор shell узнает о том, что файл исполняемый, когда для выполнения команды создает новый процесс? Если файл исполняемый, то как узнать, создан ли он в результате трансляции исходной программы или же представляет собой набор команд языка shell? В каком порядке следует выполнять проверку указанных условий?

31. В командном языке shell символы ">>" используются для направления вывода данных в файл с указанной спецификацией, например, команда: run >>outfile открывает файл с именем "outfile" (а в случае отсутствия файла с таким именем создает его) и записывает в него данные. Напишите программу, в которой используется эта команда.

main() { exit(0); }

<


Содержание  Назад  Вперед