Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lec01.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
241.66 Кб
Скачать

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; }}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]