Скачиваний:
65
Добавлен:
08.01.2014
Размер:
2.6 Mб
Скачать

12.6.3. Расширения режима реального времени

В последнее время в стандарт POSIX были введены определенные расширения для режима реального времени. Как и потоки управления, это специализированная и сложная область, и часто ядро UNIX обладает достаточными возможностями для решения большинства задач реального времени. Специфические требования для реализации работы в режиме реального времени включают в себя:

  • организацию очереди сигналов и дополнительные средства для работы с сигналами (см. sigwaitinfo, sigtimedwait, sigqueue);

  • управление приоритетом и политикой планирования процессов и потоков (см. процедуры, начинающиеся с sched_);

  • дополнительные средства для работы с таймерами, асинхронным и синхронным вводом/выводом;

  • альтернативы рассмотренным процедурам передачи сообщений, интерфейсам семафоров и разделяемой памяти (попробуйте найти процедуры, начинающиеся с mq_, sem_ и shm_).

12.6.4. Получение параметров локальной системы

В книге были рассмотрены некоторые процедуры, сообщающие системные ограничения (например, pathconf). Есть также и другие процедуры, служащие для той же цели:

sysconf

Обеспечивает доступ к конфигурационным параметрам, находящимся в файлах <limits.h> и <unistd.h>

SysInfo

Возвращает информацию о системе

GetHostName

Возвращает имя локального компьютера

uname

Возвращает указатель на структуру utsname, содержащую название операционной системы, имя узла, которое может использоваться системой в сети для установления связи, а также номер версии системы UNIX

getpwent

Это семейство процедур обеспечивает доступ к данным из файла паролей /etc/passwd. Все следующие вызовы возвращают указатель на структуру passwd, определенную в файле <pwd.h>:

getpwnam(const char *username);

getpwuid(uid_t uid);

getpwent(void);

getgrent

Это семейство процедур связано с доступом к файлу описания групп /etc/group

getrlimit

Обеспечивает доступ к предельным значениям системных ресурсов, таких как память или доступное дисковое пространство

getlogin

cuserid

Получает имя пользователя для текущего процесса

Пример использования SysInfo:

Uses Linux;

Function Mb(L : Longint) : longint;

begin

Mb:=L div (1024*1024);

end;

Var Info : TSysInfo;

D,M,Secs,H : longint;

begin

If Not SysInfo(Info) then

Halt(1);

With Info do

begin

D:=Uptime div (3600*24);

UpTime:=UpTime mod (3600*24);

h:=uptime div 3600;

uptime:=uptime mod 3600;

m:=uptime div 60;

secs:=uptime mod 60;

Writeln('Uptime : ',d,'days, ',h,' hours, ',m,' min, ',secs,' s.');

Writeln('Loads : ',Loads[1],'/',Loads[2],'/',Loads[3]);

Writeln('Total Ram : ',Mb(totalram),'Mb.');

Writeln('Free Ram : ',Mb(freeram),'Mb.');

Writeln('Shared Ram : ',Mb(sharedram),'Mb.');

Writeln('Buffer Ram : ',Mb(bufferram),'Mb.');

Writeln('Total Swap : ',Mb(totalswap),'Mb.');

Writeln('Free Swap : ',Mb(freeswap),'Mb.');

end;

end.

Пример использования uname:

Uses linux;

Var UN : utsname;

begin

if Uname (UN) then

With UN do

begin

Writeln ('Name : ',pchar(@sysname[0]));

Writeln ('Nodename : ',pchar(@Nodename[0]));

Writeln ('release : ',pchar(@Release[0]));

Writeln ('Version : ',pchar(@Version[0]));

Writeln ('Machine : ',pchar(@Machine[0]));

Writeln ('Domainname : ',pchar(@domainname[0]));

end;

end.

Соседние файлы в папке Полищук, Семериков. Системное программирование в UNIX средствами Free Pascal