キーボードを使わずに標準入力へ文字列を送信することは可能でしょうか？


こちらの記事を読み進めているとこちらのようなことが書かれていました

この通り「あたかもキーボードから打ち込まれたかのようにデータを読み込み、あたかも画面へ文字を送るかのようにデータを書き込むことができる仕組みになっている」なら、端末エミュレータには標準入出力操作をするためのAPIが存在するはずだと考えました

そのようなAPIは存在しますか？存在するとしたらそのAPIを使って、ある仮想コンソールから別のある仮想コンソールへの入力や出力はどのように行えるのでしょうか？

[キーボードと画面って? -
標準入力・標準出力ってなに?](https://qiita.com/angel_p_57/items/03582181e9f7a69f8168#%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E3%81%A8%E7%94%BB%E9%9D%A2%E3%81%A3%E3%81%A6)

>
> その後は、紙ではなくて文字表示機能を持ったディスプレイに表示するテキスト端末に置き換わり、そしてグラフィカルな表示が当たり前の今でも端末エミュレータというソフトとして生き残っています。上述のTTYという言葉はLinuxに残っていて、CUIログイン時の仮想コンソールを表す特殊ファイル名が/dev/tty1,/dev/tty2,…となっています。
>
>
> これはかつてのTTYのように、あたかもキーボードから打ち込まれたかのようにデータを読み込み、あたかも画面へ文字を送るかのようにデータを書き込むことができます。CUIログインすると、ログインシェルはこのファイルを標準入力・標準出力・標準エラーに結び付けた状態になります。




微妙に因果関係が逆というか。端末エミュレータの元となった[ダム端末](https://ja.wikipedia.org/wiki/%E3%83%80%E3%83%A0%E7%AB%AF%E6%9C%AB)は文字通りおバカで、人間が入力した文字をホストコンピュータに送信し、ホストコンピュータからもらった文字列を印刷なり表示なりする機能しかありません。なので

> 端末エミュレータには標準入出力操作をするためのAPIが存在する

のではありません。標準入出力を切り替えるのはホストコンピュータの OS の役目です。切り替えるための API なんてのも OS
なりシェルなりが持っています。

普通に使っているリダイレクトとかパイプとかもシェルが OS
にお願いして標準入出力を切り替えているだけです。デバイスドライバっつか端末エミュレータにお願いしているわけではありません。

[code]

    $ cat sample.txt > /dev/ttyp01
    
[/code]

とすれば `cat` コマンドの標準出力が `/dev/ttyp01` に変更されますし

[code]

    $ m4 headergenerator.m4 | uniq > machine-generated.h
    
[/code]

であれば `m4` の標準出力が `uniq` の標準入力に接続され `uniq` の標準出力が `machine-generated.h`
に変更されます。

> ある仮想コンソールから別のある仮想コンソールへの入力や出力

もし無節操にそういうことができたとしたらセキュリティ的に０点なので、通常は「仮想コンソール」であるデバイスファイル `/dev/ttyほげ*`
は排他オープンし、他からの入出力は受け付けないようにします。意識して共有可能に開けば他のプログラムの出力を当該コンソールに出力できたりするでしょうが、出力が画面なり通信上なりで入り乱れて実用にはならないでしょう。

シェルがパイプ `|` で何をやっているか、リダイレクト `>` や `<` で何をやっているか、を調べたいということなら POSIX API
関数であるところの `popen()` であるとか `dup2()`
であるとかを調べるとよいでしょう。これらの名前で検索すれば解説ページは必ず見つかります。

