c++ 使用回显将输入从一个终端发送到另一个终端

pxq42qpu  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(150)

我尝试将一个输入(例如echo "some_input" | write /dev/pts/0echo "some_input" > /dev/pts/0)从终端/dev/pts/1发送到另一个/dev/pts/0
在第二终端中,程序正在运行,例如:

#include <iostream> 
#include <string>

int main()
{
    while(std::cin){
        std::string s;

        std::cin >> s;
        std::cout << s;
    }
}

我在使用它时遇到一些困难。我可以将输入(使用echo)写入另一个终端,但输入未被验证,程序在std::cin中卡住。我想写入一个输入并验证它,就像按Enter键一样
我怎么能这么做呢?

xdnvmnnf

xdnvmnnf1#

最接近我认为你要做的事情是使用TIOCSTI ioctl。一个小的C程序,如:

#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include <sys/ioctl.h>

int main(int ac, char **av) {
    if (ac != 2) {
        fprintf(stderr, "usage: %s <terminal>\n", av[0]);
        exit(1); }
    int term = open(av[1], O_RDWR | O_NOCTTY);
    if (term < 0) {
        fprintf(stderr, "Can't open %s: %s\n", av[1], strerror(errno));
        exit(1); }
    int ch;
    while ((ch = getchar()) != EOF) {
        char c = ch;
        if (ioctl(term, TIOCSTI, &c) < 0) {
            fprintf(stderr, "Can't simulate input on %s: %s\n", av[1], strerror(errno));
            exit(1);
        }
    }
}

会将其stdin写入支持该功能的终端的输入缓冲区。根据您的系统安全设置,您可能需要成为root才能执行此操作。
然后,您应该能够将一个echo命令传输到该程序的stdin,它将把该命令“推”到终端的输入缓冲区中,然后,从终端阅读该命令的任何人都将从该缓冲区中读取该命令,就好像该命令来自终端一样。

相关问题