-> 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. Для этого выполнить следующую функцию:
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 |


