0

Ada プロジェクトに GNAT 2014 を使用していますが、簡単な (希望する) 質問があります。同時に 2 つの「コンソール」を開くことはできますか?

理由を説明しましょう。私のプログラムは、大量のログ データをコンソールに出力します。私が望むのは、プログラムの出力を出力するコンソールと、ユーザーの入力を受け取るコンソールの 2 つの別個のコンソールを用意することです。

これは実行可能ですか?それとも、これは OS 側で実行されるものであり、Ada は制御できませんか? GtkAda を使用して目的を達成できましたが、できるだけサードパーティのライブラリを使用したくないので、最初にネイティブな方法があるかどうかを知りたいと思いました (また、発行する必要があるコマンドが非常に基本的なものであることを考慮して、次のようにします)。 「終了」または「一時停止」、コンソール入力で十分です)。

4

2 に答える 2

2

必要な非インタラクティブな「コンソール」ごとにファイルを作成することを検討してください。

with Ada.Text_IO;

generic
   type Names is (<>);
package Generic_Consoles is
   procedure Open_Or_Create;
   function File (Name : in Names) return Ada.Text_IO.File_Access;
end Generic_Consoles;

package body Generic_Consoles is
   Files : array (Names) of aliased Ada.Text_IO.File_Type;

   procedure Open_Or_Create is
      use Ada.Text_IO;
   begin
      for Name in Files'Range loop
         begin
            Open (File => Files (Name),
                  Mode => Append_File,
                  Name => Names'Image (Name));
         exception
            when others =>
               Create (File => Files (Name),
                       Mode => Append_File,
                       Name => Names'Image (Name));
         end;
      end loop;
   end Open_Or_Create;

   function File (Name : in Names) return Ada.Text_IO.File_Access is
   begin
      return Files (Name)'Access;
   end File;
end Generic_Consoles;

パッケージをインスタンス化して を呼び出すとOpen_Or_Create、通常のすべての Ada.Text_IO 出力プロシージャでさまざまな「コンソール」を使用できます。

Put_Line (File => Consoles (Parser_Errors),
          Item => "Error 42: Could not parse statement.");
于 2014-08-21T11:55:03.620 に答える
1

たとえば、ロギング フレームワークに GNATCOLL.Traces を使用できます (Put_Line の代わりに)。これにより、ログの送信先を正確に制御できます。特に、ログの一部をファイルに送信するように構成したり、一部をターミナルに送信したりすることができます。

できることの 1 つは、ログの一部をファイルに送信し、2 番目のターミナルでそのログ ファイルを監視することです。これは、ログを上にスクロールできるため、より便利ですが、端末では古いログが失われる傾向があります。

もちろん、単純な Put_Line (Standard_Error, "...") またはファイルに対しても同じアプローチを実行できますが、GNATCOLL.Traces は動的に構成可能であり、多くの場合、より便利です。

于 2014-08-20T12:36:22.280 に答える