2017-09-27 2 views
0

ファイルの終わりに達したときにwait_for_inputが待機しない理由を理解できません。 Mac OS Xでswi-prolog 7.6.0、Red Hat Linux 6、swi-prolog 5.7.11で試してみました。私は引用符なしで、単一の行 "f(1)。"を含むファイルへのストリームを開きます。 wait_for_inputが返ってくるが、ストリームを読むとend_of_fileを返す次のような動作が起こります。ストリームがファイルの最後にあるファイルのswi-prolog wait_for_input

?open( 'file.prolog'、読み取り、InStrm、[エイリアス(instrm)、eof_action(リセット)])。
InStrm = instrm。

?wait_for_input([instrm]、RL、15)。
RL = [instrm]。

?read(instrm、Trm)
Trm = f(1)。

?wait_for_input([instrm]、RL、15)。
RL = [instrm]。

?read(instrm、Trm)
Trm = end_of_file。

私はeof_action(reset)を使用して、別のプロセスがファイルに追加すると、新しいデータを取得します。

答えて

0

wait_for_input/3は実際にはあなたのユースケースに使用されていません。

利用でき、実装はに基づいています。

はSWIをプロローグのマニュアルによると、(使用可能な場合、あなたのケースで真であるべき)デフォルトの用途によって/ 3「世論調査」システムコールをwait_for_input poll()システムコール。

「世論調査」システムコール、今度は、常に通常のファイルのためにすぐに成功します。

通常のファイルは常に読み取りと書き込みのためにTRUEポーリングするものとします。

詳細情報については、以下のリンクを参照してください:

http://www.swi-prolog.org/pldoc/doc_for?object=wait_for_input/3

https://linux.die.net/man/3/poll

関連する問題