возвращает информацию о системе, в частности сетевое и доменное имена компьютера, а также версию операционной системы. Единственным аргументом функции является указатель на структуру типа
utsname
. Функция заполняет следующие поля этой структуры (все эти поля содержат текстовые строки).
■
sysname
.
Здесь содержится имя операционной системы (например,
Linux
).
■
release
,
version
. В этих полях указываются номера версии и модификации ядра.
■
machine
. Здесь приводится информация о платформе, на которой работает система. В случае Intel-совместимых компьютеров это будет либо
i386
, либо
i686
, в зависимости от процессора.
■
node
. Это имя компьютера.
■
__domain
. Это имя домена.
Функция
uname
объявлена в файле
<sys/utsname.h>
.
В листинге 8.13 показана небольшая программа, которая отображает номера версии и модификации ядра Linux, а также сообщает тип платформы.
Листинг 8.15. (print-uname.c) Вывод информации о ядре и платформе
#include <stdio.h>
#include <sys/utsname.h>
int main {
struct utsname u;
uname(&u);
printf("%s release %s (version %s) on %s\n", u.sysname,
u.release, u.version, u.machine);
return 0;
}
Глава 9
Встроенный ассемблерный код
Сегодня лишь немногие программисты используют в своей практике язык ассемблера. Языки высокого уровня, такие как С и C++, поддерживаются практически на всех архитектурах и обеспечивают достаточно высокую производительность программ. Для тех редких случаев, когда требуется встроить в программу ассемблерные инструкции, в коллекции GNU-компиляторов (GCC) предусмотрены специальные средства, учитывающие особенности конкретной архитектуры.
Встроенными ассемблерными инструкциями следует пользоваться осторожно, так как они являются системно-зависимыми. Например, программу с инструкциями архитектуры x86 не удастся скомпилировать на компьютерах PowerPC. В то же время такие инструкции позволяют напрямую обращаться к аппаратным устройствам, вследствие чего программный код выполняется чуть быстрее.
В программы, написанные на языках С и C++, ассемблерные инструкции встраиваются с помощью функции
asm
. Например, на платформе x86 команда
asm("fsin" : "=t" (answer) : "0" (angle));
является эквивалентом следующей инструкции языка C: [30]
answer = sin(angle);
Обратите внимание на то, что, в отличие от обычных ассемблерных инструкций, функция
asm
позволяет указывать входные и выходные операнды, используя синтаксис языка С.
Подробнее узнать об инструкциях архитектуры x86, используемых в настоящей главе, можно по следующим адресам: