>> Edit article
이름
제목
패스워드
: 다음의 소스는 가상의 터미널(의사단말기)를 : 생성하는 소스입니다. : 소스끝에 에러메시지가 있음다... : 함 봐주시구여... 답변 부탁여... : : #include <stdio.h> : #include <fcntl.h> : #include <stropts.h> : : #define PTY_MASTER "/dev/ptmx" : : int : pty_master() : { : int master_fd; : : if ((master_fd = open (PTY_MASTER, O_RDWR)) < 0) : return(-1); : : return(master_fd); : } : : : int : pty_slave(master_fd) : int master_fd; : { : int slave_fd; : char *slavename; : int grantpt(); : int unlockpt(); : char *ptsname(); : : if (grantpt(master_fd) < 0) { : close(master_fd); : return(-1); : } : : if (unlockpt(master_fd) < 0) { : close(master_fd); : return(-1); : } : : slavename = ptsname(master_fd); : if (slavename == NULL) { : close(master_fd); : return(-1); : } : : slave_fd = open(slavename, O_RDWR); : if (slave_fd < 0) { : close(master_fd); : return(-1); : } : : if (ioctl(slave_fd, I_PUSH, "ptem") < 0) { : close(master_fd); : return(-1); : } : if (ioctl(slave_fd, I_PUSH, "ldterm") < 0 ) { : close(master_fd); : return(-1); : } : : return(slave_fd); : } : : main (argc, argv, envp) : int argc; : char **argv; : char **envp; : { : int master_fd, slave_fd, childpid; : : if (!isatty(0) || !isatty(1)) : err_quit("stdin and stdout must be a : terminal"); : : master_fd = pty_master(); : if (master_fd < 0) : err_sys ("can't open master pty"); : if ((childpid = fork()) < 0) : err_sys("can't fork"); : else if (childpid == 0) { : slave_fd = pty_slave(master_fd); : if (slave_fd < 0) : err_sys("can't open pty slave"); : close(master_fd); : : exec_shell(slave_fd, argv, envp); : } : : pass_all(master_fd, childpid); : exit(0); : } : : : 위의 소스를 컴파일 시키면 다음과 같은 메시지가 나옵니다... : 해결방법이 없을까여...??? : 도와주세여... : : [peter@host peter]$ gcc -o pty pty1.c : /tmp/ccILuNss.o: In function `main': : /tmp/ccILuNss.o(.text+0x18a): undefined reference to : `err_quit' : /tmp/ccILuNss.o(.text+0x1a7): undefined reference to `err_sys' : /tmp/ccILuNss.o(.text+0x1c4): undefined reference to `err_sys' : /tmp/ccILuNss.o(.text+0x1f3): undefined reference to `err_sys' : /tmp/ccILuNss.o(.text+0x213): undefined reference to : `exec_shell' : /tmp/ccILuNss.o(.text+0x223): undefined reference to : `pass_all' : collect2: ld returned 1 exit status : : 원래의 프로그램이 유닉스용이구여 저는 : 알짜리눅스 6.1을 사용합니다.... : 알려주세여... : 감솨여... 유닉스와 리눅스는 완벽히 호환되지 않습니다.. 위의 두 함수는 리눅스에는 없다는 말이지요... err_sys는 대충 fprintf(ferror, " error message");로 바꿔주시면 되는 듯도 한데.. pass_all은 어떻게 처리해야 할지..--이 곳에 서명을 적어주십시오. 하늘은 언제나 푸르다 _._V
Copyleft
1999-2026 by
JSBoard Open Project
Theme Designed by
IDOO
All right reserved