【问题标题】:Using one terminal to send input to other terminal?使用一个终端将输入发送到另一个终端?
【发布时间】:2013-05-24 19:04:44
【问题描述】:

我是 C 编程的初学者,我正在尝试编写代码以将输入从一个终端发送到另一个终端,而我正在运行一个程序(我不知道它是否有任何区别,但是这是一个远程登录程序)。这样做的原因是我经常给程序写一个命令,它会发送一些文本,使我到目前为止写的内容无法更改。 我的意图是在主终端下的一个小终端中运行一个程序,并通过这个发送命令,我在堆栈溢出中查看了很多问题来编写这个程序,但它似乎不起作用,所以我决定在这里问我做错了什么?对不起,如果这不是这个网站的适当问题,但这是我所知道的最好的。这是我的代码:

(如果您有任何建议,我也很感激)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char command[1001];
    char px[1001 + 8 + 13 + 3] = "";
    char p1[8] = "echo | ";
    char p2[13] = " > /dev/pts/";
    char p3[3] = "";

    int term, compLimit, i;
    compLimit = 14;

    printf("Put terminal number here: ");
    scanf("%d", &term);
    sprintf(p3, "%s%d", p3, term);

    while(strncmp(px, "exit mudclient", compLimit))
    {
        for(i = 0; i < 1021; i++) px[i] = 0;
        scanf("%s", command);
        strcat(px, p1);
        strcat(px, command);
        strcat(px, p2);
        strcat(px, p3);
        system(px);
    }
    return 0;
}

【问题讨论】:

  • 获取 tty 号码,尝试获取 pid,然后写入 /proc/pid/fd/0
  • 我在 proc 中没有 pid 目录。 @n.m。我去看看,谢谢。
  • @n.m.我查看了一些文档页面和其他文档,试图解释 ioctl() 函数的作用以及如何使用它,但我无法从字面上理解任何内容,正如我所说,我是一个初学者。你能试着向我解释一下如何使用它吗?请不要评判我,因为我只花了半个小时寻找它,通常如果我只是有一点我能理解它的感觉,我会花几个小时寻找它,但这似乎真的超出了我的技能。
  • ioctl 以标准文件 API 未涵盖的方式控制设备或文件。它有很多用途,因为有很多东西要控制,而且这些东西因设备而异。因此,它可以接受多种数据作为其第三个参数。它接受的种类由第二个参数决定。别担心,就像here 所示的那样使用它。在这种情况下,ioctl 接受单个字符作为第三个参数,并将其插入到 TTY 输入中,就好像它是由硬件发送的一样。

标签: c linux


【解决方案1】:

从您对问题的描述来看,您真正需要的是主 ncurses 库。有了它,您将能够在单个终端中将输出与输入分开,您还将获得功能齐全的输入编辑功能(带有可滚动的命令历史记录)。

【讨论】:

    猜你喜欢
    • 2022-11-26
    • 2014-04-07
    • 1970-01-01
    • 2016-04-13
    • 2012-01-30
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    相关资源
    最近更新 更多