Skip to main content

Сборки sercd, sredir and so on под Solaris

Сохраним-ка в закладки, иногда нужно и старьем позаниматься. Вот нужен работающий rfc2217 на машинке с Solaris, и тчк 🙂

Что-то вроде такого на выхлопе:

ilyxa@snooky:/storarray/source/sercd-3.0.0$ gcc -Wall -g -O2 -lsocket -lnsl  -o sercd  sercd.o win.o unix.o
Undefined                       first referenced
 symbol                             in file
cfmakeraw                           unix.o
ld: fatal: symbol referencing errors
collect2: ld returned 1 exit status

Лечить так лечить 🙂

cfmakeraw, cfgetospeed, cfgetispeed, cfsetispeed, cfsetospeed – получение и изменение атрибутов терминала, управление последовательным портом, определение и изменение скорости обмена информацией. В Solaris отсутствуют. Изготавливаем высокоуровневую заглушку.

#include <sys/termios.h>

void 
cfmakeraw(struct termios *t) { 
 
 t->c_iflag &= ~(IMAXBEL|IXOFF|INPCK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON|IGNPAR); 
 t->c_iflag |= IGNBRK; 
 t->c_oflag &= ~OPOST; 
 t->c_lflag &= ~(ECHO|ECHOE|ECHOK|ECHONL|ICANON|ISIG|IEXTEN|NOFLSH|TOSTOP|PENDIN); t->c_cflag &= ~(CSIZE|PARENB); 
 t->c_cflag |= CS8|CREAD; 
 t->c_cc[VMIN] = 1; 
 t->c_cc[VTIME] = 0; 
}

Далее, FIONBIO vs SOL_IP , вот такой вывод:

sercd.c: In function ‘SetSocketOptions’:
sercd.c:274:26: error: ‘SOL_IP’ undeclared (first use in this function)
sercd.c:274:26: note: each undeclared identifier is reported only once for each function it appears in
sercd.c:285:22: error: ‘FIONBIO’ undeclared (first use in this function)
gmake: *** [sercd.o] Error 1

FIONBIO:

#include <sys/filio.h>

SOL_IP отсутствует в socket.h (типа POSIX). Да и не надо.

#ifndef SOL_IP
#define SOL_IP IPPROTO_IP
#endif