将字符串重定向到当前 TTY

将字符串重定向到当前 TTY

我有一些代码:

char *tty_name = ttyname(STDIN_FILENO);
char command[255] = "/usr/sbin/writevt -t "; strcpy(stpcpy(command + 21, tty_name), " -T ' \r'"); system(command);

它向当前 TTY 写入一个“空格”和一个“回车符”。这很适合我的使用。但是,我想知道是否有更简单的方法来实现这一目标?我试过这个:

echo -e " \r > $(tty)"

但是,它不起作用。

答案1

你可以改为open(2) /dev/tty这样写:

#include <err.h>
#include <fcntl.h>
#include <stdio.h>

int main(void)
{
    int ttyfd;
    if ((ttyfd = open("/dev/tty", O_WRONLY)) == -1)
        err(1, "open /dev/tty failed");
    printf("test1\n");
    dprintf(ttyfd, " \rxxx");
    printf("test2\n");
    return 0;
}

" \r"它本身可能不可见,因为它可能会被下一行写入的内容破坏。)

答案2

您可以简单地执行以下操作(假设 echo 接受 -n 作为“不打印尾随新行”):

echo -ne " \r" > "$(tty)"

重定向 ( >) 在引号内不起作用。

“一行”示例:

$ echo -n Test; echo -ne " \r " > $(tty); echo "New string"
New string

更强大(可移植)的解决方案是使用 printf:

$ printf Test;     printf ' \r' > "$(tty)"    ; echo "New string"

并作为POSIX 要求) 使用 common/dev/tty作为进程 tty 的名称:

printf ' \r' > /dev/tty

有关的:Posix 需要任何设备吗?

相关内容