2017-09-27 3 views
0

Ich verstehe nicht, warum wait_for_input nicht wartet, wenn das Ende einer Datei erreicht ist. Ich habe es unter Mac OS X mit swi-prolog 7.6.0 und Red Hat linux 6 mit swi-prolog 5.7.11 ausprobiert. Ich öffne einen Stream zu einer Datei, die die einzige Zeile "f (1)." Enthält, ohne die Anführungszeichen. Ich bekomme das folgende Verhalten, wobei wait_for_input zurückgibt, aber das Lesen des Streams gibt end_of_file.swi-prolog wait_for_input auf Dateien, wo der Stream am Ende der Datei ist

? - öffnen ('file.prolog', lesen, InStrm, [alias (intrm), eof_action (reset)]).
InStrm = Instrm.

? - wait_for_input ([Instrm], RL, 15).
RL = [Instrm].

? - lesen (Instrm, Trm).
Trm = f (1).

? - wait_for_input ([Instrm], RL, 15).
RL = [Instrm].

? - lesen (Instrm, Trm).
Trm = Ende_der_Datei.

Ich benutze eof_action (reset), so dass, wenn ein anderer Prozess an die Datei anfügt, der Leser die neuen Daten erhalten wird.

Antwort

0

wait_for_input/3 sollte nicht wirklich für Ihren Anwendungsfall verwendet werden.

Nach Swi-Prolog in der Dokumentation, wait_for_input/3 verwendet standardmäßig „poll“ Systemaufruf (wenn verfügbar, die in Ihrem Fall wahr sein soll):

Wenn verfügbar, wird die Umsetzung auf der Basis poll() Systemaufruf.

„Umfrage“ Systemaufruf, der wiederum gelingt es immer sofort für normale Dateien:

Reguläre Dateien immer TRUE zum Lesen und Schreiben abfragen sollen.

für weitere Informationen folgende Links:

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

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

Verwandte Themen