
- •Тема 1. Основы Unix
- •Структура unix
- •Сравнение Windows 2000 и Unix
- •Сравнение FreeBsd и Linux
- •Командные интерпретаторы Unix
- •Тема 2. Команды интерпретатора
- •2.1 Команды работы с файловой системой
- •2.2 Создание ссылок
- •2.3 Конвейеры и перенаправление ввода-вывода
- •Тема 3. Сценарии
- •3.1 Редактирование исходных файлов
- •3.2 Работа с командным интерпретатором
- •3.3 Переменные
- •3.4 Взаимодействие с пользователем
- •3.5 Арифметические операции в сценариях
- •Тема 4. Операторы сценариев
- •4.1 Операторы цикла
- •4.2 Другие операторы
- •4.3 Арифметические операторы and и or
- •Код завершения
- •Файловые дескрипторы
- •Отладка сценариев
- •4.7 Запись команд
- •Использование специальных символов
- •Тема 5. Файловая система FreeBsd
- •Разделы жесткого диска
- •5.2 Файловые системы
- •Монтирование файловых систем
- •Блоки и индексные дескрипторы
- •5.5 Пользователи и группы
- •5.6 Права доступа к файлам и каталогам
- •5.7 Добавление и удаление учетных записей пользователей
- •5.8 Управление процессами
- •Тема 6. Работа с файлами в Unix
- •6.2 Файловые функции Unix
- •6.3 Пример программы для обработки файла
- •Тема 7. Межмашинное взаимодействие
- •7.1 Сокеты
- •7.2 Функции для программирования сокетов
- •Тема 8. Программирование процессов
- •8.1 Информация о процессах
- •8.2 Создание порожденного процесса
- •8.3 Программные каналы
- •Тема 9. Web и Ftp сервисы
- •9.1 Конфигурирование Web-сервера
- •9.2 Конфигурирование ftp-сервера
- •Подключение к Internet
5.8 Управление процессами
Получить информацию о запущенных процессах можно с помощью команды top. Команда выполняется в реальном времени – выводимая информация постоянно обновляется. Колонка PID содержит идентификатор процесса, т.е. число, присваиваемое каждому процессу при запуске.
Команда ps отображает мгновенное состояние процесса на момент запуска команды.
Завершить процесс можно командой kill, при этом в качестве аргумента команды задается PID процесса.
Можно также командой renice изменить приоритет процесса.
Тема 6. Работа с файлами в Unix
6.1 Компиляция и запуск программы на C++
Для проверки работы компилятора g++ можно набрать простейшую программу на языке Си.
#include <stdio.h>
int main()
{
printf ("Hello");
}
Сохраним файл под именем a.cpp.
Компиляцию программы выполним командой
g++ a.cpp -o a.out .
Здесь опция –o определяет имя выходного исполняемого файла.
Запуск программы на выполнение выполним командой
./a.out .
Программа должна выдать приветствие Hello.
6.2 Файловые функции Unix
Для работы с файловой системой используются следующие функции Unix [2]:
int open (const char* path, int acces_mode, int permission) -прототип функции находится в fcntl.h, path – путь, permission обычно 0.
Флаги режима доступа: O_RDONLY – для чтения, O_WRONLY – для записи, O_RDWR – для чтения и записи.
Существует также модификатор доступа, например O_CREAT – если файл не существует, он создается.
Функция возвращает дескриптор файла или -1 при ошибке.
int creat (const char* path, int acces_mode) – упрощенный вариант создания файла.
long read (int fdesc, void* buf, int size) – читается блок данных из файла.
Прототип находится в unistd.h, fdesc – файловый дескриптор, buf – адрес буфера, содержащего прочитанные данные, size – количество байтов, которое нужно прочитать из файла.
Функция возвращает количество прочитанных байтов.
long write (int fdesc, const void* buf, int size) – записывает блок данных в файл.
Прототип - в unistd.h, параметры как в read.
Функция возвращает количество байтов, успешно записанных в файл.
long lseek (int fdesc, long pos, int whence) – изменяет текущую позицию указателя чтения-записи в файле.
Прототип - в unistd.h, pos – задает смещение в байтах, которое должно быть прибавлено к базовому адресу для получения нового смещения. Параметр whence задает базовый адрес:
SEEK_CUR – текущий адрес указателя в файле;
SEEK_SET – начало файла;
SEEK_END – конец файла.
Функция возвращает смещение.
6.3 Пример программы для обработки файла
Программа имеет следующие режимы работы:
1 - создание файла, состоящего из записей следующего содержания: наименование компьютерной техники, количество, цена;
2 - корректировка файла, состоящая в изменении цены конкретного устройства;
3 - просмотр содержания файла.
#include <iostream.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#define STOP ""
struct UNIT
{ char name[20]; int amount;
float price;} work;
int len = sizeof(UNIT);
int fdesc;
char fname[] = "list";
void sozd()
{
fdesc=open (fname, O_WRONLY);
for(int i=1;i<10;i++)
{ puts ("Введите наименование: ");
getchar();
gets (work.name);
if (strcmp(work.name, STOP) == 0) break;
puts ("Введите количество и цену: ");
scanf ("%i%f", &work.amount, &work.price);
write(fdesc, &work, len);
}
close (fdesc);}
void correct()
{
char s[20]; float c;
puts ("Введите наименование: ");
getchar();
gets(s);
puts ("Введите новую цену: ");
scanf("%f",&c);
fdesc=open (fname, O_RDWR);
for(int i=0;i<10;i++)
{ int res = read(fdesc, &work, sizeof(UNIT));
if (res==0) break;
if (strcmp(work.name, s) == 0)
{ work.price = c;
lseek(fdesc, -len, 1);
write (fdesc, &work, len);
break;
} }
close(fdesc);
}
void vyvod()
{
fdesc=open (fname, O_RDONLY);
for(int i=0;i<10;i++)
{ int res = read(fdesc,&work, len);
if (res == 0) break;
printf ("name=%s; amount=%i; price=%f;\n",
work.name, work.amount, work.price);
}
close(fdesc);
}
void main()
{
int r;
puts ("Режимы работы:");
puts ("1 - создание файла; 2 - корректировка ; 3 - вывод");
puts ("Введите режим: ");
scanf ("%i", &r);
switch (r) {
case 1 : sozd(); break;
case 2 : correct(); break;
case 3 : vyvod(); break; }}