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)"
但是,它不起作用。
你可以簡單地做(假設 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
你可以改為
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"
它本身可能不可見,因為它可能會被下一行書寫的內容破壞。)