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