文字列を現在の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)"

Redirect( >) は引用符内では機能しません。

「一行」の例:

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

より強力な(移植可能な)ソリューションはprintfを使用することです。

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

そしてPOSIXの要件/dev/ttyプロセスttyの名前としてcommonを使用します。

printf ' \r' > /dev/tty

関連:Posixには機器が必要ですか?

関連情報