PIPE

ページ名:PIPE
  • PIPE

hStream = PIPE sPipeName FOR [ READ ] [ WRITE ] [ WATCH ]

読み取り、書き込み、またはその両方のために名前付きパイプを開きます。 パイプが存在しない場合は自動的に作成されます。
パイプは、同じシステム内のプロセス間で一方向の通信の流れを提供します。 言い換えれば、それらは半二重、つまりデータが一方向にのみ流れるということです。
パイプの1つの大きな特徴は、通信媒体を流れるデータが一時的なものであるということです。 "read"記述子を使用してデータが読み取られると、それを再度読み取ることはできません。 また、書き込み記述子にデータを連続して書き込むと、データが書き込まれた順序でのみデータを読み取ることができます。
ただし、入力操作または出力操作を実行する前に、パイプの両端を同時に開く必要があります。 読み込み用にパイプを開くと、通常、他のプロセスが書き込み用に同じパイプを開くまでブロックされます。
GambasはFIFO(先入れ先出し)パイプを実装しています。 詳細については、Linux / UnixのマニュアルページにあるMKFIFOを参照してください。

  1. READキーワードが指定されていると、パイプは読み取り用にオープンされます。
  2. WRITEキーワードが指定されている場合、パイプは書き込み用に開かれます。
  3. WATCHキーワードが指定されている場合、パイプはインタプリタによって監視されます。

   ・少なくとも1バイトをパイプから読み取ることができる場合は、イベントハンドラFile_Read()が呼び出されます。

   ・少なくとも1バイトをパイプに書き込める場合は、イベントハンドラFile_Write()が呼び出されます。

パイプが正常に開かれると、ストリームオブジェクトが変数hStreamに返されます。

パイプストリームはバッファされません。

Errors

Message

Description
Access forbidden (43) 要求されたパイプへのアクセスが許可されていないか、pathnameのパス接頭部にあるディレクトリーの1つに対する検索許可が拒否されているか、親ディレクトリーへの書き込みアクセスが許可されていません。

Device is full (37)

ファイル名を作成しようとしましたが、パイプ名を含む装置に新規ファイル用のスペースがありません。
Not a directory (49) Pipe nameでディレクトリとして使用されているコンポーネントは、実際にはディレクトリではありません。
System error... (42) その他の考えられるシステムエラー:
  • パス解決中に発生したシンボリックリンクが多すぎます。

  • path引数の長さが最大パスを超えているか、パス名コンポーネントが最大名を超えています。

  • pathで指定されたパスプレフィックスの構成要素が既存のディレクトリを指定していないか、pathが空の文字列です。

  • 新しいファイルを格納するディレクトリを拡張できないか、ファイルシステムのファイル割り当てリソースが不足しています。

  • 開いているファイルの総数のシステム制限に達しました。

  • パイプ名が読み取り専用ファイルシステム上のファイルを参照しており、書き込みアクセスが要求されました。

Examples

'パイプに送信されたメッセージを印刷します
'1つのウィンドウで実行を開始してから実行します。ls> / tmp / FIFO1


Dim hFile As File
Dim sLine As String

hFile = Pipe "/tmp/FIFO1" For Read

Do
Read #hFile, sLine,
-256
If Not sLine Then Break
Print sLine;
Loop

 

'データが大量のテキスト行であることがわかっている場合は、パイプを読む別の方法

Dim hFile As File
Dim sLine As String

hFile = Pipe "/tmp/FIFO1" For Read

Do
Line Input #hFile, sLine
If hFile.EndOfFile Then Break
Print sLine
Loop

See also

 

 

シェアボタン: このページをSNSに投稿するのに便利です。

コメント

返信元返信をやめる

※ 悪質なユーザーの書き込みは制限します。

最新を表示する

NG表示方式

NGID一覧