rcmd(), rcmd_af()

Выполнить команду на удаленном хосте

Прототип:

#include <unistd.h>
int rcmd( char **ahost,
unsigned short inport,
const char *locuser,
const char *remuser,
const char *cmd,
int *fd2p );
int rcmd_af( char **ahost,
unsigned short inport,
const char *locuser,
const char *remuser,
const char *cmd,
int *fd2p,
int af );

Аргументы:

ahost
Имя хоста, на котором требуется выполнить команду. Если функция может найти такой хост, она устанавливает *ahost в значение стандартного имени хоста.
inport
Интернет-порт на хосте, где находится сервер.
locuser
Идентификатор пользователя на локальном компьютере.
remuser
Идентификатор пользователя на удаленном компьютере.
cmd
Команда, которую требуется выполнить.
fd2p
См. ниже.
af
(только для rcmd_af()) Семейство адресов; см. <sys/socket.h>. Если af указан как AF_UNSPEC или PF_UNSPEC, интерпретация *ahost подчиняется разрешению базовых адресов, например DNS.

Библиотека:

libsocket

Описание:

Функция rcmd() используется суперпользователем для выполнения команды cmd на удаленном компьютере с использованием схемы аутентификации на основе зарезервированных номеров портов. Функция rcmd() может обрабатывать только IPv4-адреса в качестве первого аргумента; rcmd_af() может обрабатывать и другие типы адресов. Сервер rshd (среди прочих) использует функции rcmd(), rresvport(), и ruserok().

Функции rcmd() и rcmd_af() ищут хост *ahost с помощью gethostbyname(), и возвращают -1 если указанный хост не существует. В противном случае, *ahost устанавливается в значение стандартного имени хоста, и устанавливается соединение с сервером, находящимся на интернет-порте inport.

Если соединение установлено успешно, сокет SOCK_STREAM в Интернет-домене возвращается вызывающей стороне и передается удаленной команде как стандартный ввод и стандартный вывод.

fd2p не равен нулю
Устанавливается вспомогательный канал для процесса управления, и его дескриптор помещается в *fd2p. Процесс управления вернет диагностический вывод команды (unit 2) по этому каналу и примет байты в качестве номеров сигналов, которые будут перенаправлены в группу процессов команды.
fd2p равен нулю
Стандартная ошибка (unit 2 удаленной команды) выполняется так же, как и стандартный вывод, и не предусмотрено никаких условий для отправки произвольных сигналов удаленному процессу (хоть и возможно "привлечь внимание" процесса, используя внеполосные данные).

Возвращаемое значение:

Корректный дескриптор сокета; либо -1 в случае возникновения ошибки (также выводится сообщение об ошибке в stderr).

Коды ошибок:

EAGAIN
Данный код ошибки перегружен и означает «Все сетевые порты используются».

Классификация:

Unix

Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Нет

Тематические ссылки:

gethostbyname(), iruserok(), iruserok_sa(), rresvport(), ruserok()




Предыдущий раздел: Описание API сетевой библиотеки