我有一些代码:
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 需要任何设备吗?