如何解析Linux(Ubuntu)PTY bash输出数据?

如何解析Linux(Ubuntu)PTY bash输出数据?

我正在编写一个程序,用于在 Windows 控制台上显示 Linux(Ubuntu)PTY bash 输出数据。但是,显示某些字节(例如颜色字节)看起来不太友好。有协议文档来指示如何解析它吗?谢谢。

2020-10-03:我做了两个程序,一个是 Linux 上的 pty 服务器,一个是 Windows 上的 pty 客户端,它们通过 TCP/IP 进行通信。服务器程序的代码如下:

server->onBufferReceived = [&mpty](EasyTCP::IConnection* c, EasyTCP::AutoBuffer data)
{
    int ret = write(mpty, data.data(), data.size());
    ...
};

ret = openpty(&mpty, &spty, NULL, NULL, NULL);
if (ret == -1)
{
    fprintf(stderr, "openpty failed, err[%d]: %s", ret, strerror(errno));
    return 1;
}

printf("%s\n", ttyname(spty));

pid_t child = fork();
if (child == -1)
{
    fprintf(stderr, "fork failed, err[%d]: %s", ret, strerror(errno));
    return 1;
}

if (child == 0)
{
    login_tty(spty);
    execl("/bin/bash", "");
    return 0;
}
assert(server->open(7777));
...

if (FD_ISSET(mpty, &rset))
{
    int n = read(mpty, buf, sizeof(buf) - 1);
    ...

    buf[n] = 0;
    ...
    assert(connection->send(sendBuf));
}

客户端程序代码如下:

client->onBufferReceived = [](EasyTCP::IConnection* c, EasyTCP::AutoBuffer data)
{
    printf(data.data());
    fflush(stdout);

    data.resize(0);
    assert (c->recv(data, false));
};
...

client->connect("xxxxxx", xxxx);
....
int k = getchar();
if (k < 0 || k > 255)
{
    fprintf(stderr, "getchar k = %d", k);
    continue;
}
char c = (char)k;

EasyTCP::AutoBuffer sendBuf(&c, 1);
sendBuf.resize();
assert (client->send(sendBuf));

但客户端程序显示有些字节不友好。

答案1

我找到了一份关于该协议的文档。请参阅https://en.wikipedia.org/wiki/ANSI_escape_code

相关内容