cat
selbst, nein. Es liest den Eingabestrom, bis das Ende der Datei angegeben ist, und blockiert bei Bedarf die Eingabe.
Es gibt nichts, was Sie daran hindert, Ihr eigenes cat
-Äquivalent zu schreiben, das select
bei der Standardeingabe verwendet, um eine Zeitüberschreitung zu erreichen, wenn nichts schnell genug kommt und Sie unter diesen Bedingungen beenden.
Tatsächlich habe ich einmal ein So Da Sie Probleme damit haben, ist hier eine Version von Dann können Sie einfach (a) Eigentlich wurde es snail
-Programm geschrieben (weil eine Schnecke langsamer ist als eine Katze), die ein zusätzliches Argument von Zeichen pro Sekunde brauchte, um langsam eine Datei (a) . snail 10 myprog.c
würde myprog.c
mit zehn Zeichen pro Sekunde ausgeben. Für das Leben von mir kann ich mich nicht erinnern, warum ich das getan habe - ich vermute, ich habe nur herumgemurkst und darauf gewartet, dass eine echte Arbeit auftaucht. dog.c
(basierend auf meinem oben erwähnten snail
-Programm), die tun wird, was Sie wollen: dog
ohne Argumente ausführen (so wird die Standardeingabe verwendet) und nach fünf Sekunden ohne Aktivität wird Folgendes ausgegeben: slowcat
genannt, aber snail
ist viel schöner und ich bin nicht über ein bisschen weniger Revisionismus, wenn es die Geschichte besser klingen lässt: -)
Hier ist der Code für timeout-cat:
%Vor% Es ist im Grunde dasselbe wie Paxdiablos Hund.
Es funktioniert als cat
ohne ein Argument - catting the stdin. Als erstes Argument liefern wir Timeout Sekunden.
Eine Einschränkung (gilt auch für den Hund) - Linien sind liniengepuffert, so dass Sie n-Sekunden haben, um eine Linie (kein Zeichen) zum Zurücksetzen des Timeout-Alarms bereitzustellen. Dies ist wegen readline.
Verwendung :
statt potenziell endlos:
%Vor%Sie können Code oben zu timeout_cat und:
kompilieren %Vor% mbuffer
, mit der Option -W
, funktioniert für mich.
Ich musste stdin
in eine Datei setzen, aber mit einem Timeout im Leerlauf:
mbuffer
dafür zu verwenden.) cat
benötigt. mbuffer
auf den Tisch bringt. Ich musste -A /bin/false
hinzufügen, um eine Warnung zu unterdrücken, basierend auf einem Vorschlag in der verknüpften Manpage. Mein Aufruf zum Kopieren von stdin
in eine Datei mit 10 Sekunden Leerlauf-Timeout sah schließlich wie