나래머드 컴파일 에러 질문1 : ioctl()에서 TIOCGETA, TIOSETA

ophmun의 이미지

Ubuntu 10.04 / gcc 4.4.3 입니다

컴파일 중 에러메시지가 뜨며 컴파일이 안 됩니다

interpreter.c: In function ‘echo_local’:
interpreter.c:623: warning: implicit declaration of function ‘ioctl’
interpreter.c:623: error: ‘TIOCGETA’ undeclared (first use in this function)
interpreter.c:623: error: (Each undeclared identifier is reported only once
interpreter.c:623: error: for each function it appears in.)
interpreter.c:625: error: ‘TIOCSETA’ undeclared (first use in this function)

소스의 해당 부분입니다

void echo_local(int fd)
{
   struct termios io;
 
   ioctl(fd, TIOCGETA, &io);
   io.c_lflag |= ECHO;
   ioctl(fd, TIOCSETA, &io);
}

혹 BSD와 linux의 차이일까요 (원래 BSD에서 돌아가던 걸로 보입니다)
http://onlamp.com/pub/a/onlamp/2001/06/07/linux_bsd.html?page=2

어떻게 고쳐야 컴파일이 되겠습니까? ㅜㅜ

octaphial의 이미지

man tcgetattr
man tcsetattr

ophmun의 이미지

매뉴얼을 읽어보았는데 모르겠습니다-.-

ymir의 이미지

ioctl(fd, TIOCGETA, &io); 대신 tcgetattr() 과 tcsetattr() 을 사용하라는 뜻일겁니다.
헤더 뒤져보니 TIOCGETA 는 사용되지 않는듯 하네요..

아래에 echo on/off 예제가 있습니다. 참고하시면 될 듯 싶네요.
http://www.joinc.co.kr/modules/moniwiki/wiki.php/article/termios

아니면 Makefile 에서 -DHAVE_TERMIOS_H 를 없애고 빌드해도 될겁니다.
단지, 터미널 제어는 해본 적이 별로 없어서..
ioctl 의 TCGETA/TCSETA 조합으로 echo 를 컨트롤 할 수 있는지에 확답은 못 드리겠네요.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』