-> s

1.5 Активировать сеть в системном загрузчике. Для этого выполнить следующую команду:

-> n

1.6 Смонтировать файловую систему NFS или FTP. Для этого выполнить следующую команду:

-> m

1.7 Записать образ ОС РВ с помощью системного загрузчика во flash-память по адресу 0xb8400000. Для этого выполнить следующую команду:

-> J 0xb8400000, “oc83b. bin”

8  Настроить системный загрузчик на запуск ОС РВ из flash-памяти.

1.1 Установить параметры системного загрузчика. Для этого выполнить следующую команду:

-> c

и для каждого изменяемого параметра ввести значение в соответствии со следующей таблицей:

Параметр

Значение

boot device

go=0xb8400000

flags

0x0

1.2 Сохранить параметры системного загрузчика. Для этого выполнить следующую команду:

-> s

9  Запустить ОС РВ.

1.1 Выключить прибор.

1.2 Переключить прибор в штатный режим.

1.3 Включить прибор.

1.4 В результате должна появиться заставка ОС РВ.

10  Проверить функционирование службы NFS под управлением ОС РВ.

1.1 Запустить ОС РВ в соответствии с описанием, приведенном разделе 7.

Если после вывода заставки ОС РВ появляются сообщения

RPC timeout for server ……

- дождаться их завершения.

1.2 Перейти в каталог /nfs. Для этого выполнить следующую команду:

> cd “/nfs”

1.3 Вывести содержимое каталога /nfs. Для этого выполнить следующую команду:

> ls

Убедиться, что файл с именем “test_nfs” отсутствует в каталоге /nfs.

1.4 Создать средствами ОС РВ файл с именем test_nfs в каталоге /nfs. Для этого выполнить следующую команду:

> fopen “test_nfs”, “w+”

1.5 Вывести содержимое каталога /nfs. Для этого выполнить следующую команду:

> ls

1.6 Убедиться, что файл с именем test_nfs присутствует в каталоге /nfs.

11  Выполнить прикладную задачу на целевой ЦЭВМ.

1.1 Запустить ОС РВ в соответствии с разделом 7.

1.2 Перейти в каталог экспорта /nfs. Для этого выполнить следующую команду:

cd “/nfs”

1.3 Загрузить объектный модуль прикладной задачи. Для этого выполнить следующую команду:

load “a. o”

1.4 Выполнить прикладную программу print. Для этого выполнить следующую функцию:

print

1.5 В результате, в каталоге /nfs будет создан файл hello. Чтобы убедиться в этом, необходимо выполнить следующую команду:

ls

1.6 Исполнить прикладную программу thread состоит из следующих функций:

1)  startThread1 – запустить поток управления №1.

2)  startThread2 – запустить поток управления №2.

3)  startThread3 – запустить поток управления №3.

4)  startThread4 – запустить поток управления №4.

5)  startThread5 – запустить поток управления №5.

6)  startAllThreads – запустить все потоки управления с заданной политикой распределения времени между ними.

7)  stopAllThreads – остановить все потоки управления.

8)  printInfo – отобразить состояние потоков управления (количество захватов семафора) и содержимое кольцевого буфера.

9)  clearAllCounters - очистить счетчики захватов семафора для всех потоков управления.

1.7 Каждый поток управления прикладной программы thread (стартовые функции startThread1, startThread2, startThread3, startThread4, startThread5) выполняет в цикле следующую последовательность действий:

1)  Захватывает семафор.

2)  Увеличивает свой счетчик захватов семафора.

3)  Записывает свой порядковый номер в кольцевой буфер.

4)  Освобождает семафор.

1.8 Запустить в отдельных потоках управления стартовые функции прикладной программы thread. Для этого выполнить следующую команду:

startAllThreads <sched policy>

где,

<sched policy> – параметр, указывающий политику распределения времени между потоками управления программы thread. Допустимые значения:

0 – политика SCHED_FIFO;

1 – политика SCHED_RR.

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

1.9 Отобразить информацию об исполняемых потоках. Для этого выполнить следующую команду:

ti

В результате будет выведена таблица с номерами, названиями и приоритетами потоков управления. По умолчанию, каждому потоку управления присваивается приоритет, равный 100.

1.10  Отобразить информацию о текущем исполнении прикладной программы thread. Для этого выполнить следующую функцию:

printInfo

В результате будет выведена следующая информация:

Threads info:

Thread 1: count = число_count1

Thread 2: count = число_count2

Thread 3: count = число_count3

Thread 4: count = число_count4

Thread 5: count = число_count5

running = число_running

position = число_position

arrayNumberThread[0] = число_0

arrayNumberThread[1] = число_1

arrayNumberThread[2] = число_2

arrayNumberThread[3] = число_3

arrayNumberThread[4] = число_4

arrayNumberThread[5] = число_5

arrayNumberThread[6] = число_6

arrayNumberThread[7] = число_7

arrayNumberThread[8] = число_8

arrayNumberThread[9] = число_9

где,

число_count1(2,3,4,5) – количество захватов семафора каждым из потоков управления;

НЕ нашли? Не то? Что вы ищете?

число_running – количество исполняемых потоков управления прикладной программы thread;

число_position – текущая позиция кольцевого буфера;

число_0(1,2,3,4,5,6,7,8,9) – порядковый номер потока управления.

1.11  Увеличить приоритет 5-го потока управления прикладной программы thread, до значения 101. Для этого выполнить следующую команду:

tsp %<номер потока управления (см. вывод команды ti)> 101

1.12  Уменьшить приоритет 1-го потока управления прикладной программы thread, до значения 99. Для этого выполнить следующую команду:

tsp %<номер потока управления (см. вывод команды ti)> 99

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

clearAllCounters

1.14  Убедиться, что изменилась последовательность захвата семафора потоками управления прикладной программы thread. Для этого выполнить следующую функцию:

printInfo

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

1.15  Остановить все потоки управления прикладной программы thread. Для этого выполнить следующую функцию:

stopAllThreads

Приложение 1 Загрузка файла в РПЗУ по протоколу z-modem с помощью программы ПЗУ «PRIME» и эмулятора терминала «minicom»

Программа minicom позволяет загружать файлы во flash-память модуля ЦЭВМ, доступные через файловую систему среды исполнения ОС Linux.

Для загрузки файла во flash-память необходимо выполнить следующую последовательность действий.

1.16  Соединить ЦЭВМ и ИЭВМ через последовательный порт RS-232.

1.17  Включить ИЭВМ и зайти под пользователем osuser.

1.18  Подключиться к ЦЭВМ. Для этого на ИЭВМ запустить эмулятор терминала командой:

minicom -8 –o com1

1.19  Включить ЦЭВМ. В результате, в эмуляторе терминала, будет отображена начальная загрузка прибора. Необходимо дождаться появления сообщения, указывающего на окончание загрузки программы ПЗУ «PRIME»:

prime>

1.20  Установить скорость обмена через последовательный порт RS-232 в значение 115200. Для этого в эмуляторе терминала выполнить команду:

sbaud a 115200

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

последовательно нажать комбинацию клавиш Ctrl+A P I Enter.

1.21  Подготовить ЦЭВМ для записи файла в оперативную память по адресу 0xa0100000. Для этого в эмуляторе терминала выполнить команду:

rz 0xa0100000 a

1.22  В течении 30 секунд подготовить эмулятор терминала для отправки файла из ИЭВМ через последовательный порт RS-232. Для этого в эмуляторе терминала выполнить следующую последовательность действий:

1)  Перейти в меню выбора файлов. Для этого нажать комбинацию клавиш Ctrl+A S Enter.

2)  С помощью стрелок курсора выбрать файл и выделить его нажатием на клавишу Пробел.

3)  Отправить файл. Для этого нажать на клавишу Enter.

1.23  Ожидать завершения записи файла в оперативную память ЦЭВМ. При выбранной скорости в 115200 запись файла размером в 1 Мб займет около 1.2 минуты. После завершения записи файла, в эмуляторе терминала будет отображено следующее сообщение:

Transfer complete

READY: press any key to continue...

и необходимо нажать любую клавишу.

1.24  Записать файл во flash-память ЦЭВМ, скопировав его из оперативной памяти. Для этого в эмуляторе терминала выполнить команду:

wfn 0xa0100000 <размер файла> <адрес flash-памяти>

где,

<размер файла> - размер файла, выраженный в байтах;

<адрес flash-памяти> - начальный адрес flash-памяти для записи файла.

Например:

wfn 0xa0100000 0x180000 0xb8000000

Для подтверждения записи во flash-память необходимо нажать клавишу Y.

1.25  Установить скорость обмена через последовательный порт RS-232 в значение 9600. Для этого в эмуляторе терминала выполнить команду:

sbaud a 9600

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

последовательно нажать комбинацию клавиш Ctrl+A P E Enter.

Приложение 2 Текст демонстрационной программы

/**

Прикладная программа thread состоит из следующих функций:

startThread1 - запустить поток управления ©1.

startThread2 - запустить поток управления ©2.

startThread3 - запустить поток управления ©3.

startThread4 - запустить поток управления ©4.

startThread5 - запустить поток управления ©5.

startAllThreads - запустить все потоки управления для выполнения функции general().

stopAllThreads - остановить все потоки управления.

printInfo - отобразить состояние потоков управления (количество захватов

семафора) и содержимое кольцевого буфера.

clearAllCounters - очистить счетчики захватов семафора semGeneral для всех

потоков управления

Каждый поток управления (стартовые функции startThread1, startThread2,

startThread3, startThread4, startThread5) выполняет в цикле следующую

последовательность действий:

1) Захватывает семафор.

2) Увеличивает свой счетчик захватов семафора.

3) Записывает свой порядковый номер в кольцевой буфер.

4) Освобождает семафор.

Использование прикладной программы thread с помощью интерпрeтатора shell ОС РВ:

tst startThread1

tst startThread2

tst startThread3

tst startThread4

tst startThread5

printInfo

clearAllCounters

stopAllThreads

*/

#include <stdio. h>

#include <semaphore. h>

#include <time. h>

#include <pthread. h>

/**

Размер кольцевого буфера arrayNumberThread.

Буфер заполняется потоками управления при каждом захвате семафора

semGeneral.

Поток управления записывает свой порядковый номер в текущую позицию буфера.

*/

#define ARRAY_SIZE 10

/**

Максимальное количество потоков управления, которые могут одновременно

исполнять функцию general().

*/

#define MAX_COUNT_THREADS 5

/**

Кольцевой буфер, размером ARRAY_SIZE.

*/

char arrayNumberThread[ARRAY_SIZE];

/**

Текущая позиция кольцевого буфера

*/

static int position = 0;

/**

Массив счетчиков захвата семафора semGeneral для каждого потока управления.

*/

static int count[MAX_COUNT_THREADS];

/**

Текущее количество потоков управления, исполняющих функцию general().

*/

static int running = 0;

/**

Семафор, обеспечивающий конкурентный доступ к кольцевому буферу

arrayNumberThread.

*/

sem_t semGeneral;

/**

Вывести в консоль и в файл с именем "hello" строку приветствия.

*/

void print ()

{

// Сформировать строку приветствия

static char* string = "\nHello NIISI RAS!\n\n";

// Открыть на запись файл hello

FILE* file = fopen ("hello", "w+");

// Вывести в файл строку приветствия

fprintf (file, "%s", string);

// Закрыть файл

fclose (file);

// Вывести на консоль строку приветствия

printf ("%s", string);

}

/**

Ожидание заданного времени.

@param ms время, заданное в миллисекундах.

*/

void mlsleep(int ms)

{

// Подготовить переменную для использования в функции nanosleep()

struct timespec time;

// Задать количество секунд, равных 0

time. tv_sec = 0;

// Задать количество миллисекунд, равных ms

time. tv_nsec = (ms % 1000) * 1000000;

// Ожидать заданное количество времени

nanosleep (&time, NULL);

}

/**

Функция обеспечивает бесконечный цикл, в котором выполняются следующие

действия:

1) захватывается семафор semGeneral;

2) увеличивается счетчик захватов семафора semGeneral;

3) в кольцевой буфер записывается порядковый номер потока управления;

4) ожидание 50 миллисекунд;

5) освобождается семафор semGeneral;

4) ожидание 10 миллисекунд.

@param number порядковый номер потока управления.

Возможный диапазон значений: от 1 до MAX_COUNT_THREADS.

*/

void general (int number)

{

// Сообщить о начале работы потока управления с номером number

printf ("Start thread %d\n", number);

// Увеличить счетчик потоков управления, выполняющих данную функцию

running++;

// Если функция исполняется первый раз, то

if (running == 1)

{

int i;

// Инициализировать семафор semGeneral

sem_init (&semGeneral, 0, 1);

// Инициализировать кольцевой буфер

for (i = 0; i < sizeof(arrayNumberThread) / sizeof(*arrayNumberThread); i++)

{

arrayNumberThread[i] = 0;

}

}

// Выполнять бесконечный цикл. Цикл завершается после исполнения функции

// stopAllThreads()

while (running)

{

// Захватить семафор semGeneral

sem_wait (&semGeneral);

count[number - 1]++;

arrayNumberThread[position++] = number;

position %= ARRAY_SIZE;

// Ожидать 50 миллисекунд для создания мнимой деятельности

mlsleep (50);

// Освободить семафор semGeneral

sem_post (&semGeneral);

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

// другим потокам управления захватить семафор semGeneral

mlsleep (10);

}

// Сообщить о завершении работы потока управления с номером number

printf ("Stop thread %d\n", number);

}

/**

Отобразить в консоль информацию о выполнении программы.

Отобразить состояние потоков управления (количество захватов семафора)

и содержимое кольцевого буфера.

В результате будет выведена следующая информация:

Threads info:

Thread 1: count = число_count1

Thread 2: count = число_count2

Thread 3: count = число_count3

Thread 4: count = число_count4

Thread 5: count = число_count5

running = число_running

position = число_position

arrayNumberThread[0] = число_0

arrayNumberThread[1] = число_1

arrayNumberThread[2] = число_2

arrayNumberThread[3] = число_3

arrayNumberThread[4] = число_4

arrayNumberThread[5] = число_5

arrayNumberThread[6] = число_6

arrayNumberThread[7] = число_7

arrayNumberThread[8] = число_8

arrayNumberThread[9] = число_9

где,

число_count1(2,3,4,5) - количество захватов семафора каждым из потоков управления;

число_running - количество исполняемых потоков управления прикладной программы thread;

число_position - текущая позиция кольцевого буфера;

число_0(1,2,3,4,5,6,7,8,9) - порядковый номер потока управления.

*/

void printInfo()

{

int i;

printf ("Threads info:\n");

// Захватить семафор semGeneral

sem_wait (&semGeneral);

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

for (i = 0; i < sizeof(count) / sizeof(*count); i++)

{

printf ("Thread %d: count = %d\n", i+1, count[i]);

}

// Отобразить количество потоков управления, выполняемых функцию general()

printf ("running = %d\n", running);

// Отобразить текущую позицию кольцевого буфера

printf ("position = %d\n", position);

// Отобразить содержимое кольцевого буфера

for (i = 0; i < sizeof(arrayNumberThread) / sizeof(*arrayNumberThread); i++)

{

printf ("arrayNumberThread[%d] = %d\n", i, arrayNumberThread[i]);

}

// Освободить семафор semGeneral

sem_post (&semGeneral);

}

/**

Остановить все потоки управления, выполняющие функцию general().

*/

void stopAllThreads ()

{

running = 0;

}

/**

Очистить счетчики захватов семафора semGeneral для всех потоков управления.

*/

void clearAllCounters()

{

int i;

// Захватить семафор semGeneral

sem_wait (&semGeneral);

// Очистить счетчики захватов семафора semGeneral для всех потоков управления

for (i = 0; i < sizeof(count) / sizeof(*count); i++)

{

count[i] = 0;

}

// Освободить семафор semGeneral

sem_post (&semGeneral);

}

/**

Запустить поток управления с номером 1 для выполнения функции general().

*/

void startThread1()

{

general (1);

}

/**

Запустить поток управления с номером 2 для выполнения функции general().

*/

void startThread2()

{

general (2);

}

/**

Запустить поток управления с номером 3 для выполнения функции general().

*/

void startThread3()

{

general (3);

}

/**

Запустить поток управления с номером 4 для выполнения функции general().

*/

void startThread4()

{

general (4);

}

/**

Запустить поток управления с номером 5 для выполнения функции general().

*/

void startThread5()

{

general (5);

}

/**

Запустить все потоки управления для выполнения функции general().

*/

int startAllThreads (int hasPolicyRR)

{

int status = 0;

pthread_t thread;

pthread_attr_t attr;

status += pthread_attr_init (&attr);

status += pthread_attr_setschedpolicy (&attr, hasPolicyRR? SCHED_RR : SCHED_FIFO);

status += pthread_create (&thread, &attr, (void*(*)(void*))startThread1, 0);

status += pthread_create (&thread, &attr, (void*(*)(void*))startThread2, 0);

status += pthread_create (&thread, &attr, (void*(*)(void*))startThread3, 0);

status += pthread_create (&thread, &attr, (void*(*)(void*))startThread4, 0);

status += pthread_create (&thread, &attr, (void*(*)(void*))startThread5, 0);

return status;

}

Приложение 3 Команды интерпретатора Shell

ti

Имя

ti - вывод сведений о состоянии потока управления

Синтаксис

ti [thread[,format]]

Аргументы

thread

поток управления;

format

формат.

Описание

Команда ti позволяет получить сведения о состоянии потока управления, а также список потоков управления.

Аргумент thread определяет поток управления и может быть задан одним из следующих способов:

      адрес описателя потока управления (в виде константы или имени переменной, содержащей адрес), например, 0xfee4d0; в виде %<номер>, где <номер> - порядковый номер потока управления, например, %2.

Аргумент format может принимать следующие значения:

0

выводить подробную информацию о потоке управления (используется по умолчанию);

1

выводить только краткую информацию о потоке управления.

Если все аргументы опущены, то выводится список всех потоков управления. В этом случае о каждом потоке управления выводится только краткая информация.

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

-> ti
N adr entry point status flags pri errno schp
1 0x80fbdb30 netThread R D P 200 000000 FIFO
2 0x80fbb2f4 telnetd P D P 200 000000 FIFO
3 0x80fb89f8 portmapd W D P 127 000016 FIFO
4 0x80fb60fc rdbThread W D P 235 000004 FIFO
5 0x80fb00b4 readDebugMsg P D P 255 000000 FIFO
6 0x80f9dc5c osShell W P 150 000000 FIFO
7 0x80be5f08 tndTask P D P 200 000000 FIFO
8 0x80be1d1c osShell R 200 000000 FIFO

Колонки таблицы имеют следующий смысл:

N

номер потока управления;

adr

адрес описателя потока управления;

entry point

первая исполняемая в рамках потока функция;

status

статус;

flags

флаги;

pri

приоритет;

errno

значение переменной errno;

schp

стратегия планирования.

Символы в поле статуса имеют следующий смысл:

D

поток ждет истечения интервала времени;

E

поток управления завершен (описатель потока будет удален в результате выполнения функции pthread_join()).

P

поток ждет ресурса (семафора, мьютекса и др.);

R

поток работоспособен;

S

поток приостановлен (например, отладчиком);

T

происходит завершение потока;

W

поток ждет события (окончания операции ввода/вывода и др.);

Символы поля флагов имеют следующий смысл:

A

разрешено асинхронное удаление потока;

C

получен запрос на удаление потока;

D

поток имеет атрибут PTHREAD_CREATE_DETACHED;

N

запрещено удаление потока;

P

поток находится в точке удаления;

S

получен (но еще не обработан) сигнал.

U

поток не может быть приостановлен отладчиком (unbreakable);

Пример использования команды ti для получения подробной информации о потоке управления:

-> ti %2
 N adr entry point status flags pri errno schp
 2 0x80fbb2f4 telnetd P D P 200 000000 FIFO
 stack 0x80fbb4d8,0x1ff8,0x1008
 signals/mask 0x/0x
 start arg 0x
0xf 00000.........3000
 waiting for sem 0x00fee4d0

После слова stack указан адрес стека, его длина и длина свободной (неиспользованной) части стека. После слова signals/mask указано множество сигналов, полученных потоком, но еще не обработанных, а также маска сигналов. Каждому типу сигнала соответствует один бит. После слов start arg указано значение аргумента первой исполняемой в рамках потока функции. Содержимое начала адресуемого им участка памяти выводится ниже.

Строка waiting for... указывает причину неработоспособности потока управления:

mq

поток приостановлен в связи с операцией над очередью сообщений (чтение из пустой очереди или отправка в переполненную очередь);

sem

поток находится в очереди к семафору;

mtx

поток находится в очереди к мьютексу;

cnd

поток находится в очереди к условной переменной;

signals

поток ждет сигнала;

event

поток ждет события (например, конца операции ввода/вывода).

Если указано mq, sem, mtx или cnd, то далее идет адрес очереди сообщений, семафора, мьютекса или условной переменной, соответственно. Если указано signals, то далее указана маска ожидаемых сигналов.

Если поток работоспособен, то вместо waiting for выводится ready, а для приостановленных потоков - suspended.

sem

Имя

sem - вывод информации о семафоре

Синтаксис

sem [semaphore[,format]]

Аргументы

semaphore

семафор;

format

формат.

Описание

Команда sem выводит состояние указанного семафора, а также позволяет получить список всех семафоров. Эта команда может использоваться как для именованных, так и для неименованных семафоров.

Аргумент semaphore определяет семафор и может быть задан одним из следующих способов:

      адрес семафора (в виде константы или имени переменной, содержащей адрес), например, 0x00fee4d0; в виде %s<номер>, где <номер> - порядковый номер семафора (для неименованных семафоров), например, %s2; в виде %s"<имя>", где <имя> - имя семафора (для именованных семафоров), например, %s"sem_debug".

Аргумент format может принимать следующие значения:

0

выводить список потоков управления, находящихся в очереди к семафору (это значение используется по умолчанию);

1

выводить только краткую информацию о каждом семафоре (без списков).

Если все аргументы опущены, то выводится список всех семафоров. В этом случае о каждом семафоре выводится только краткая информация.

Пример использования команды sem:

-> sem %s1
N adr name value open wait
1 0x00fee4d0 sem_debug 0 2 0x
 0x80fbdb30
 0x80fbb2f4
 0x80fb89f8
 0x80fb60fc

Колонки таблицы имеют следующий смысл:

N

номер семафора;

adr

адрес семафора;

name

имя семафора (для именованных семафоров);

value

значение счетчика семафора;

open

количество открытий семафора (для именованных семафоров);

wait

адреса описателей потоков, ждущих семафора;

di

Имя

di - вывод содержимого памяти

Синтаксис

di [addr][,length]

Аргументы

addr

адрес области памяти;

length

длина области памяти.

Описание

Команды dc, ds и di выводят содержимое указанной области памяти. При этом команда dc рассматривает эту область памяти как массив байтов, команда ds - как массив коротких целых (short int), а команда di - как массив длинных целых (long int).

Если используется команда di и адрес области не кратен 4, то адрес округляется до ближайшего меньшего числа кратного 4. Если используется команда ds и адрес области не кратен 2, то адрес округляется до ближайшего меньшего числа кратного 2. Если аргумент addr опущен, то считается, что обрабатываемая область начинается сразу же после области памяти, выведенной предыдущей командой dc, ds или di. Длина области по умолчанию равна 100 байтам.

Пример использования команды di:

-> di 0x
0xf 6e3a2d36 .xception: arg=6
0x 2c766563 6e756d3d 360a6d302c ,vecnum=6.epc=0,
0x80000d3138 2c73723d  cause=18,sr=3000
0x80000c627661 3d300a74 61736b3d af04,bva=0.task=
0xe61 0x80ff4cc8 signa
0x80000d653e6573 ture=e0e0e0e nes
0x80000c6576 tlev

В начале строки находится адрес участка памяти, за которым идет содержимое этого участка в шестнадцатеричном формате. Далее идет содержимое того же участка в символьном формате (одному байту соответствует один символ).

lkup

Имя

lkup - вывод содержимого таблицы имен

Синтаксис

lkup [filter]

Аргумент

filter

условие на имена

Описание

Команда lkup выводит содержимое таблицы имен.

Аргумент filter задает строку символов либо явно, например, "mq_", либо именем строковой переменной. Если аргумент задан, то будет выведена информация только о тех переменных, имя которых содержит указанную последовательность символов. В противном случае будет выведена вся таблица имен.

Пример использования команды lkup:

-> lkup "mq_"
mq_close,0x233b78,fip
mq_getattr,0x2349b0,fipp
mq_notify,0xfipp
mq_open,0xfppi
mq_receive,0xfippip
mq_send,0xfippii
mq_setattr,0x2348b0,fippp
mq_timedreceive,0xfippipp
mq_timedsend,0xfippiip
mq_unlink,0x233cd4,fip

Каждая строка описывает одну переменную или функцию и содержит три элемента, разделенные запятыми:

      имя; адрес; тип.

Тип переменной или функции представляет собой последовательность символов. Первый символ может принимать следующие значения:

f

функция;

g

глобальная переменная.

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

c

char,

d

double,

f

float,

i

int,

p

pointer,

s

char* (строка),

v

void,

w

short.

Третий, четвертый и последующие символы используются только для функций и указывают тип первого, второго и последующих аргументов. Они могут принимать те же значения, что и второй символ, за исключением v.

netif

Имя

netif - вывод информации о сетевых интерфейсах

Синтаксис

netif

Аргументы

Аргументов нет.

Описание

Команда netif выводит сведения о сетевых интерфейсах

Выводятся следующие основные сведения об интерфейсах компьютера с сетью (сетевых интерфейсах):

      имя интерфейса; тип интерфейса (например, Ethernet); физический адрес (HWaddr), например, MAC-адрес для Ethernet; IP-адрес (IP-addr); маска сети (mask); MTU (Maximum Transmission Unit - максимальная единица передачи); количество коллизий (collisions); длина выходной очереди (sendqueue).

Выводится также следующая информация о приеме (recv) и передаче (send) данных:

      количество пакетов (packets); количество байтов (bytes); количество ошибок (errors); количество сброшенных пакетов (dropped).

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4