2009-07-11 14 views
0

ファイル名を引数として受け入れる多くのコマンドラインアプリケーションでは、パイプも使用できます。例:Windowsで名前付きパイプを使用するタイミングは?

anApplication file.txt 

はまた

anApplication | anotherApplication arguments 

で動作し、それは私がこれまでのWindowsと同等のことを学んだファイル

あったように「anotherApplication」の結果が「anApplication」にリダイレクトされます「名前付きパイプ」です。私は、コマンドラインアプリケーションがそれを理解するために名前付きパイプを認識しなければならないのか、またはファイルを引数として受け入れるコマンドラインアプリケーションが名前付きパイプで代わりに動作するのか疑問に思います。

答えて

9

あなたはこれをかなり後方に持っています。ただ、正確には:

anApplication file.txt 

これは、最初のコマンドライン引数としてファイル名file.txtanApplicationを実行します。

anApplication | anotherApplication arguments 

これはコマンドライン引数なしでanApplicationを実行します。標準出力は、コマンドライン引数としてargumentsで実行されるanotherApplicationの標準に接続されています。これは、Unix版と全く同じです。名前付きパイプは全く異なるOS機能です。

名前付きパイプはファイルのように見えるが、出力と入力を添付できるデータストリームのように機能するディレクトリエントリです。

1

AFAIK WindowsではUNIXと同じように動作します。私は、いくつかの高度なWin32コンソールAPI関数がこれをバイパスするかもしれないと思いますが、そのためのドキュメントを読む必要があります。

1

これはcmd.exeの構文です。

この種のパイプリダイレクトは、特定の質問に答えるためにというプログラムで動作するはずです。標準のコンソールアプリケーションであれば特別なコードは必要ありません。

注意すべき点が1つあります。プログラムが実行時APIの特別なキーボード監視フォームから入力されている場合、リダイレクトは機能しません。

4

Windowsのnamed pipeは、あなたが話しているものとは非常に異なるものです。名前付きパイプは、実際にはWindows上にサーバーアプリケーションを構築するためのツールであり、「Unixドメインソケット」とほぼ同じです。

この状況でanApplicationが機能するかどうかは、コマンドラインでファイル名を指定せずにアプリケーションを実行すると、アプリケーションがどのように反応するかによって異なります。コマンドラインを使わずに起動したときにアプリケーションがstdinから読み込むと、このようなシェルパイプの配置が有効になります(この説明はあなたの説明の中で説明されていますが、コマンドラインは別の答えによって指摘されています)。代わりに、アプリケーションがヘルプメッセージを表示し、ファイル名なしで起動すると終了すると、このシェルパイプは機能しません。