我写了一个伪终端进行测试。但结果并不是我所期望的。它有一些错误,例如在指定的单词之前丢失一个字符或整个句子。我对这些错误感到困惑。这是我的代码:
static int CreatePtyShellt()
{
int master;
int slave;
char name[30];
struct termios temp;
struct winsize winp;
pid_t pid;
if(openpty(&master,&slave,name,&temp,&winp)==-1)
{
return -1;
}
if((pid=fork())<0)
return(-1);
else if(pid==0)
{
if(setsid()<0)
perror("setsid");
if(tcsetattr(slave,TCSANOW,&temp)<0)
perror("tcsetattr");
if(ioctl(slave,TIOCSWINSZ,&winp)<0)
perror("tcsetattr");
if(dup2(slave,STDIN_FILENO)!=STDIN_FILENO)
perror("stdin");
if(dup2(slave,STDOUT_FILENO)!=STDOUT_FILENO)
perror("stdout");
if(dup2(slave,STDERR_FILENO)!=STDERR_FILENO)
perror("stderr");
if(slave!=STDIN_FILENO&&slave!=STDOUT_FILENO&&slave!=STDERR_FILENO)
close(slave);
execl("/bin/sh","bash","-i",(char *)0);
exit(0);
}
return master;
}
它出了什么问题?