stdoutへの書き込み(出力リダイレクトを除く)C

stdoutへの書き込み(出力リダイレクトを除く)C

学校で使用する簡単なアプリを作成する必要があります。

端末に1行に1つの引数を作成し、stdoutからユーザー選択を返す必要があります。

cat my_app main.c main.hたとえば、ユーザーが選択した場合はcatに戻るとmain.c書き込みますmain.c。問題は、stdout(別名STDOUT_FILENO)にメニューを作成すると返されることですcat。 STDERRにメニューを書くことはできますが、少し見苦しいです。

/dev/tty*私は、または同じデバイス/ファイルを使用する方法がわかりませんが、/dev/pty*STDOUTまたはSTDERRに書き込む必要なく、端末に何かを書き込むために使用できるようです。

デフォルトでは、端末(STDOUT、STDERR、MYOUT)に表示される新しい出力を開きたいです。

私が正しく説明したかどうかわかりません。

答え1

対話型アプリケーションを構築するには、/dev/tty制御端末にファイル記述子を返すを開くことができます。

int ttyfd = open("/dev/tty", O_RDWR);

STDIN_FILENOorの代わりにこれを使用できますSTDOUT_FILENO(プログラムが起動すると、端末以外の場所にリダイレクトされる可能性があります)。


ここにいくつかの例があります。

#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main() {
  int ttyfd = open("/dev/tty", O_RDWR);
  printf("fd: %d\n", ttyfd);
  write(ttyfd, "hello tty!\n", 11);
  return 0;
}

呼び出されると、./test >out端末にこんにちはメッセージとファイルfd: 3の同様の内容を印刷する必要がありますout

関連情報