85155 (Теория вычислительных процессов и структур)

2016-08-02СтудИзба

Описание файла

Документ из архива "Теория вычислительных процессов и структур", который расположен в категории "". Всё это находится в предмете "математика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "математика" в общих файлах.

Онлайн просмотр документа "85155"

Текст из документа "85155"

Теория вычислительных процессов и структур

Алексеев Игорь Геннадиевич, Бранцевич Петр Юльянович

Учебно-методическое пособие для студентов специальности «Программное обеспечение информационных технологий» дневной формы обучения

Белорусский государственный университет информатики и радиоэлектроники

Минск 2004

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

1. Основные команды ос unix

Вход в систему и выход

В ответ на приглашение системы ввести Logon вводим: sxtxx, например s5t03, где 5 – номер Вашей группы, а 03 – Ваш порядковый номер в группе. Затем после входа в систему устанавливаем с помощью команды passwd свой пароль длиной не менее 6 символов. Не забывайте свой логин и пароль! Пароль нельзя восстановить!

Пароль в зашифрованном виде находится в каталоге ./etс в файле shadow и для его сброса необходимо удалить набор символов после имени пользователя между двоеточиями. Например, пользователь stud1, запись в файле shadow:

stud1:gdwiefu@#@#$%66reHHrrnCvcn:12060:………

после удаления пароля запись должна быть следующая:

stud1::12060:………

Выход из системы можно осуществить по команде exit

Рабочие каталоги и файлы

Ваш рабочий каталог: /home/sxtxx, где x и xx – номер группы и порядковый номер студента в группе.

Включаемые файлы типа: stdio.h, stdlib.h и т.п. находятся в каталоге: /usr/include/

Работа с каталогами и файлами

Для вывода содержимого текущего каталога можно использовать команду: dir или ls, для изменения текущего каталога – команду: cd.

Для вывода полного имени текущего каталога можно использовать команду: pwd, для создания или удаления каталога – команды: mkdir и rmdir.

Для вывода на терминал содержимого файла можно использовать команду: cat имя_файла, например: cat prog.txt.

Для вызова файл-менеджера типа Norton`а набираем: mc (вызов оболочки файл-менеджера Midnight Commander) и далее работаем с его меню.

Для вызова текстового редактора набираем: joe или joe имя_создаваемого_или_редактируемого_файла. В самом редакторе практически все команды начинаются с последовательности ctrl-k, и нажатия нужного символа. Например, ctrl-k h выведет справку по основным командам редактора, а ctrl-k x завершит работу редактора с сохранением редактируемого файла.

Работа с программами и процессами

Запуск программы на выполнение:

./имя_программы например: ./prog1.exe

Для компиляции программ на С/С++ вызываем компилятор:

cc имя_входного_файла – о имя_выходного_файла или:

gcc имя_входного_файла – о имя_выходного_файла ,

где имя_входного_файла обязательно должно быть с расширением *.с или *.cpp, а имя_выходного_файла может быть любым (желательно совпадать с именем входного файла, кроме расширения).

Например: cc myprog1.c –o myprog1

или

gcc myprog1.c –o myprog1

Для вывода списка запущенных процессов можно использовать команду:

ps, например: ps –x выведет список всех запущенных процессов.

Для снятия задачи (процесса) можно использовать команду: kill pid_процесса, предварительно узнав его pid командой ps.

В каталоге ./proc находятся сведения обо всех запущенных процессах в системе, их состоянии, распределении памяти и т.д.

Типовой вид каталога:

./proc/1081/……..,

./proc/1085/………, где 1081 и 1082 соответственно pid запущенных процессов в системе.

Справку по командам системы или по языку С можно получить по команде:

man имя_команды, например: man ls

2. Лабораторные работы

Лабораторная работа №1

Работа с файлами и каталогами ОС UNIX

Цель работы – изучить основные команды ОС UNIX для работы с файлами и каталогами.

Теоретическая часть

Для выполнения операций записи и чтения данных в существующем файле его следует открыть при помощи системного вызова open. Ниже приведено описание этого вызова:

# include

# include

# include

int open (const char *pathname, int flags, [mode_t mode]);

Первый аргумент, pathname, является указателем на строку маршрутного имени открываемого файла. Значение pathname может быть абсолютным путём, например: /usr / keith / junk. Данный путь задаёт положение файла по отношению к корневому каталогу. Аргумент pathname может также быть относительным путём, задающим маршрут от текущего каталога к файлу, например: keith / junk или просто junk. В последнем случае программа откроет файл junk в текущем каталоге. В общем случае, если один из аргументов системного вызова или библиотечной процедуры – имя файла, то в качестве него можно задать любое допустимое маршрутное имя файла UNIX.

Второй аргумент системного вызова open - flags - имеет целочисленный тип и определяет метод доступа. Параметр flags принимает одно из значений, заданных постоянными в заголовочном файле при помощи директивы препроцессора #define ( fcnt1 является сокращением от file control - «управление файлом»). В файле определены три постоянных:

O_RDONLY – открыть файл только для чтения,

O_WRONLY – открыть файл только для записи,

O_RDWR – открыть файл для чтения и записи.

В случае успешного завершения вызова open и открытия файла возвращаемое вызовом open значение будет содержать неотрицательное целое число – дескриптор файла. В случае ошибки вызов open возвращает вместо дескриптора файла значение –1. Это может произойти, например, если файл не существует.

Третий параметр mode, является необязательным, он используется только вместе с флагом O_CREAT.

Следующий фрагмент программы открывает файл junk для чтения и записи и проверяет, не возникает ли при этом ошибка. Этот последний момент особенно важен: имеет смысл устанавливать проверку ошибок во все программы, которые используют системные вызовы, поскольку каким бы простым ни было приложение, иногда может произойти сбой. В приведенном ниже примере используются библиотечные процедуры printf для вывода сообщения и exit – для завершения процесса:

# include /* Для вызова exit */

# include

char workfile=”junk”; / Задать имя рабочего файла */

main()

{

int filedes;

/* Открыть файл, используя постоянную O_RDWR из */

/* Файл открывается для чтения / записи */

if ((filedes=open(workfile, O_RDWR)) = = -1)

{

printf (“Невозможно открыть %s\n”, workfile);

exit (1); /* Выход по ошибке */

}

/* Остальная программа */

exit (0); /* Нормальный выход */

}

Вызов open может использоваться для создания файла, например:

filedes = open (“/tmp/newfile”, O_WRONLY | O_CREAT, 0644);

Здесь объединены флаги O_CREAT и O_WRONLY, задающие создание файла /tmp/newfile при помощи вызова open. Если /tmp/newfile не существует, то будет создан файл нулевой длины с таким именем и открыт только для записи.

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

Следующая программа создаёт файл newfile в текущем каталоге:

# include

# include

#define PERMS 0644 /* Права доступа при открытии с O_CREAT */

char *filename=”newfile”;

main()

{

int filedes;

if ((filedes=open (filename, O_RDWR | O_CREAT, PERMS)) = = -1)

{

printf (“Невозможно открыть %s\n”, filename);

exit (1); /* Выход по ошибке */

}

/* Остальная программа */

exit (0);

}

Другой способ создания файла заключается в использовании системного вызова creat. Так же, как и вызов open, он возвращает либо ненулевой дескриптор файла, либо –1 в случае ошибки. Если файл успешно создан, то возвращаемое значение является дескриптором этого файла, открытого для записи. Вызов creat осуществляется так:

# include

# include

# include

int creat (const char *pathname, mode_t mode);

Первый параметр pathname указывает на маршрутное имя файла UNIX, определяющее имя создаваемого файла и путь к нему. Так же, как и в случае вызова open, параметр mode задаёт права доступа. При этом, если файл существует, то второй параметр также игнорируется. Тем не менее, в отличие от вызова open, в результате вызова creat файл всегда будет усечён до нулевой длины. Пример использования вызова creat:

filedes = creat (“/tmp/newfile”, 0644);

что эквивалентно вызову:

filedes = open (“/tmp/newfile”, O_WRONLY | O_CREAT | O_TRUNC, 0644);

Следует отметить, что вызов creat всегда открывает файл только для записи. Например, программа не может создать файл при помощи creat, записать в него данные, затем вернуться назад и попытаться прочитать данные из файла, если предварительно не закроет его и не откроет снова при помощи вызова open.

Библиотечная процедура fopen является эквивалентом вызова open:

#include

FILE *fopen (const char *filename, const char *type);

Процедура fopen открывает файл, заданный параметром filename, и связывает с ним структуру FILE. В случае успешного завершения процедура fopen возвращает указатель на структуру FILE, идентифицирующую открытый файл; объект FILE * также часто называют открытым потоком ввода / вывода (эта структура FILE является элементом внутренней таблицы). В случае неудачи процедура fopen возвращает нулевой указатель NULL. При этом, так же, как и для open, переменная errno будет содержать код ошибки, указывающий на её причину.

Второй параметр процедуры fopen указывает на строку, определяющую режим доступа. Она может принимать следующие основные значения:

r - открыть файл filename только для чтения (если файл не существует, то процедура fopen вернёт нулевой указатель NULL);

w - создать файл filename и открыть его только для записи (если файл не существует, то он будет усечён до нулевой длины);

а - открыть файл filename только для записи, все данные будут добавляться в конец файла (если файл не существует, он создаётся).

Следующий пример программы показывает использование процедуры fopen. При этом, если файл indata существует, то он открывается для чтения, а файл outdata создаётся (или усекается до нулевой длины, если он существует). Процедура fatal предназначена для вывода сообщения об ошибке. Она просто передаёт свой аргумент процедуре perror, а затем вызывается exit для завершения работы программы:

#include

char *inname = “indata”;

char *outname = “outdata”;

main()

{

FILE *inf, *outf;

if ((inf = fopen (inname, “r”)) = = NULL)

fatal (“Невозможно открыть входной файл”);

if ((outf = fopen (outname, “w”)) = = NULL)

fatal (“Невозможно открыть выходной файл”);

/* Выполняются какие-либо действия */

exit (0);

}

Основные процедуры для ввода строк называются gets и fgets:

# include

char *gets (char *buf);

char *fgets (char *buf, int nsize, FILE *inf);

Процедура gets считывает последовательность символов из потока стандартного ввода (stdin), помещая все символы в буфер, на который указывает аргумент buf. Символы считываются до тех пор, пока не встретится символ перевода строки или конца файла. Символ перевода строки newline отбрасывается, и вместо него в буфер помещается нулевой символ, образуя завершённую строку. В случае возникновения ошибки или при достижении конца файла возвращается значение NULL.

Процедура fgets является обобщённой версией процедуры gets. Она считывает из потока inf в буфер buf до тех пор, пока не будет считано nsize-1 символов или не встретится раньше символ перевода строки newline, или не будет достигнут конец файла. В процедуре fgets символы перевода строки newline не отбрасываются, а помещаются в конец буфера (это позволяет вызывающей функции определить, в результате чего произошёл возврат из процедуры fgets). Как и процедура gets, процедура fgets возвращает указатель на буфер buf в случае успеха и NULL – в противном случае.

Следующая процедура yesno использует процедуру fgets для получения положительного или отрицательного ответа от пользователя, она также вызывает макрос isspace для пропуска пробельных символов в строке ответа:

# include

# include

#define YES 1

#define NO 0

#define ANSWSZ 80

static char *pdefault = “Наберите ‘y’ (YES), или ‘n’ (NO)”;

static char *error = “Неопределённый ответ”;

int yesno (char *prompt)

{

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5167
Авторов
на СтудИзбе
437
Средний доход
с одного платного файла
Обучение Подробнее