: 다음의 소스는 가상의 터미널(의사단말기)를
: 생성하는 소스입니다.
: 소스끝에 에러메시지가 있음다...
: 함 봐주시구여... 답변 부탁여...
:
: #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