Выполнить команду на удаленном хосте
#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 );
<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
в Интернет-домене возвращается вызывающей стороне и передается удаленной команде как стандартный ввод и стандартный вывод.
2
) по этому каналу и примет байты в качестве номеров сигналов, которые будут перенаправлены в группу процессов команды. 2
удаленной команды) выполняется так же, как и стандартный вывод, и не предусмотрено никаких условий для отправки произвольных сигналов удаленному процессу (хоть и возможно "привлечь внимание" процесса, используя внеполосные данные). Корректный дескриптор сокета; либо -1
в случае возникновения ошибки (также выводится сообщение об ошибке в stderr).
Unix
gethostbyname(), iruserok(), iruserok_sa(), rresvport(), ruserok()
Предыдущий раздел: Описание API сетевой библиотеки