>>>Добрый день!
>>>
>>>Имеется следующая ситуация: нужно заставить работать два Winмодема под FreeBSD, дравйверов естественно
>>>нет и врядли когда-нибудь появятся. Поэтому реализовано следющим образом в сети
>>>есть сервер (FreeBSD 5.4) и комп с WinXP. К виновому компу
>>>подключены эти модемы, все установлено нормально - модемы работают. Там же
>>>установлен IPCOMServer перенаправляющий потоки с COM портов модемов на TCP порты
>>>и обратно.
>>>
>>>Из под FreeBSD через telnet соединяемся с этими портами, и отправляем команды
>>>- все проходит нормально, модемы на команды отвечают.
>>>
>>>Задача в следующем: нужно из под FreeBSD связать telnet сессию с виртуальным
>>>устройством, чтобы можно было работать с модемами через это устройство.
>>
>>
>>пишешь небольщой userspace daemon, который
>>1. создает pty
>>2. соединяется с tcp портом yf windows
>>
>>из fbsd обращаешься к pty
>Спасибо, сам пришел к аналогичному выводу.
>Подскажите где копать документацию, как это написать.
>Особенно интересует:
>создание pty (чтение и запись) вот тебе кусок кода, где 2 пути создания pty
#if defined(I_WILL_USE_XOPEN_PTMX)
auto char *sl;
if ( ( fd=open("/dev/ptmx",O_RDWR) ) < 0 )
{
warn("open(/dev/ptmx) failed: %s near %s:%d",strerror(errno),__FILE__,__LINE__);
return -1;
}
if ( (sl=ptsname(fd)) == NULL )
{
warn("ptsname failed: %s near %s:%d",strerror(errno),__FILE__,__LINE__);
return -1;
}
strncpy(slave,sl,PATH_MAX-1);
if ( grantpt(fd) < 0 )
{
warn("grantpt failed: %s near %s:%d",strerror(errno),__FILE__,__LINE__);
return -1;
}
if ( unlockpt(fd) < 0 )
{
warn("unlockpt failed: %s near %s:%d",strerror(errno),__FILE__,__LINE__);
return -1;
}
return fd;
#else
/* use bsd style pty
/dev/pty[p-z][0-9a-f] - master devices
/dev/tty[p-z][0-9a-f] - slave devices
*/
#define PTY01 "0123456789abcdef"
#define PTY10 "pqrs"
char *p01,*p10;
char dev[] = "/dev/ptyXX";
for ( p10=PTY10; *p10 != '\0'; p10++ )
{
dev[8] = *p10;
for ( p01=PTY01; *p01 != '\0'; p01++ )
{
dev[9] = *p01;
if ( (fd=open(dev,O_RDWR) ) >= 0 )
{
snprintf(slave,PATH_MAX-1,"/dev/tty%c%c",*p10,*p01);
return fd;
}
}
}
warn("Ran out of pty.");
return -1;
#undef PTY01
#undef PTY10
#endif /* SYSV || __USE_XOPEN */