在C ++中创建一个可供其他程序使用的伪终端

时间:2017-02-16 12:19:36

标签: c++ linux pty

我使用以下代码在C ++中创建了一个伪终端:

int main(int, char const *[])
{
  int master, slave;
  char name[1024];
  char mode[] = "0777"; //I know this isn't good, it is for testing at the moment
  int access;

  int e = openpty(&master, &slave, &name[0], 0, 0);
  if(0 > e) {
    std::printf("Error: %s\n", strerror(errno));
    return -1;
  }

  if( 0 != unlockpt(slave) )
  {
      perror("Slave Error");
  }

  access = strtol(mode, 0, 8);

  if( 0 > chmod(name, access) )
  {
      perror("Permission Error");
  }

  //std::cout << "Master: " << master << std::endl;
  std::printf("Slave PTY: %s\n", name);

  int r;
  prompt = "login: ";

  while(true) 
  {
    std::cout << prompt << std::flush;
    r = read(master, &name[0], sizeof(name)-1);
    checkInput(name);
    name[r] = '\0';
    std::printf("%s", &name[0]);
    std::printf("\n");
  }

  close(slave);
  close(master);

  return 0;
}

从某个意义上来说它非常有效,我可以做到:

  

printf'username'&gt;的/ dev / PTS / X

它会出现并按原样处理。

我的问题是:当我尝试使用屏幕时,屏幕终端上没有任何内容。然后当我输入时,它一次传到我的奴隶1个角色。

有谁知道这是为什么?或者我如何解决它。

如果需要,我可以提供更多细节。

谢谢:)

1 个答案:

答案 0 :(得分:1)

因为在使用printf后没有刷新缓冲区。

相关问题