Tsort
Erstveröffentlichung | 1979 |
---|---|
Betriebssystem | Unix, Unix-artig, V, Inferno |
Plattform | Plattformübergreifend |
Typ | Befehl |
Das tsort Programm ist a Befehlszeile Nützlichkeit auf Unix und Unix-artig Plattformen, die a durchführen Topologische Art auf seiner Eingabe. Ab 2017[aktualisieren], es ist Teil der Posix.1 Standard.[1]
Geschichte
Nach seinem Anblick die Info[2] Seite wurde dieser Befehl ursprünglich für die Bereitstellung einer Bestellung von Objektdateien geschrieben, die das erlaubten Linker um sie nacheinander zu verarbeiten (jeweils genau und in Ordnung). Die FreeBSD -Handbuchseite zeigt ihr Erscheinungsbild auf Version 7 Unix.[3]
Beachten Sie, dass die folgende Beschreibung das Verhalten der beschreibt Freebsd Implementierung von Tsort und erwähnt GNU -Merkmale, in denen sie existieren können. Andere Implementierungen oder Versionen können unterschiedlich sein.
Syntax
tsort [-dlq] [Datei]
FreeBSD -Optionen können sein:
-D Schalten Sie das Debugging -l -Suche nach und zeigen Sie den längsten Zyklus an. -Q Zeigen Sie keine Informationsnachrichten über Zyklen an.
GNU bietet nur die folgenden Optionen:
-HELP-Hilfsnachricht und Beenden-Verssion anzeigen Versionsinformationen und Beenden
Es gibt keine von POSIX vorgeschriebenen Optionen.
Verhalten
Tsort liest seine Eingabe (aus der angegebenen Datei, oder Standardeingabe Wenn keine Eingabedatei angegeben oder für eine Datei von '-') als Zeichenpaare durch Leerzeichen getrennt ist, wobei eine teilweise Bestellung angezeigt wird. Die Ausgabe ist eine Gesamtreihenfolge, die der angegebenen Teilordnung entspricht.[4]
Mit anderen Worten: für a Regie acyclische Graphen (verwendet als a Abhängigkeitsgrafik), Tsort, erstellt eine Auflistung der Eckpunkte, so dass für alle Kanten 'a-> b' 'A' in der Auflistung vor 'B' kommt.
Beispiele
Tsort listet die Eckpunkte von a auf Regie acyclische Graphen In einer solchen Reihenfolge, dass alle Bestell-/Richtungsbeziehungen respektiert werden:
$ tsort << eof> 3 8 > 3 10 > 5 11 > 7 8 > 7 11 > 8 9 > 11 2 > 11 9 > 11 10 > Eof 3 5 7 11 8 10 2 9 | ![]() Probe Dag |
Rufen Sie Diagramm an
TSORT kann dazu beitragen, Funktionen in einer Quelldatei neu zu ordnen, damit so viele wie möglich definiert werden, bevor sie verwendet werden (interpretieren Sie Folgendes als: main()
Anrufe parse_options()
, tail_file()
und tail_forever()
; tail_file()
Anrufe pretty_name()
, usw. Das Ergebnis ist das dump_remainder()
sollte zuerst definiert werden, start_lines()
Zweite usw.):
$ Cat Call-GraphHauptspeicherung Main Tail_file Main Tail_forever Tail_file Pretty_Name Tail_file write_Header Tail_file Schwanz Tail_forever Wiederholung Tail_forever Pretty_Name Tail_forever Write_Header Tail_forever Dump_remaine Tail Tail_lines Tail Tail_Bytes Tail_lines start_lines Tail_lines DUPP_REMAINDER Tail_lines File_lines Tail_lines pipe_lines Tail_Bytes xlseek Tail_Bytes start_bytes Tail_Bytes DUPP_REMAINDER Tail_Bytes Pipe_Bytes Datei_lines DUPP_REMAINDER Überprüfen Sie Pretty_Name | $ # Hinweis: 'TAC' kehrt die Reihenfolge um $ Tsort Call-Graph | TACDUPP_REMAINDER start_lines Datei_lines Pipe_lines xlseek start_bytes Pipe_Bytes Tail_lines Tail_Bytes schöner Name write_Header Schwanz Überprüfung Parse_options Tail_file Tail_forever hauptsächlich |
Bibliothek
Das traditionelle ld (Unix Linker) verlangt, dass seine Bibliothekseingaben in topologischer Reihenfolge sortiert werden, da sie Dateien in einem einzigen Pass verarbeitet. Dies gilt beide für statische Bibliotheken (*.a
) und dynamische Bibliotheken (*.so
) und im Fall statischer Bibliotheken vorzugsweise für die in den in befindlichen einzelnen Objektdateien.[5]
BSD UNIX verwendet Tsort als gemeinsamer Teil des typischen ar & Ranlib Befehlsaufrufe (von /usr/share/mk/bsd.lib.mk):
lib $ {lib} .a: $ {Objs} $ {Staticobjs} @$ {ECHO} statisch aufbauen $ {Lib} Bibliothek @$ {Ar} CQ $ {.ZIEL} `Lorder $ {Objs} $ {Staticobjs} | Tsort -q` $ {Aradd} $ {Ranlib} $ {.ZIEL}
Hier lorder
("Bibliotheksreihenfolge") wird verwendet, um die Inter-File-Abhängigkeitsliste zu generieren, indem die Symboltabelle inspiziert wird.
Nutzungsnotizen
Beachten Sie die Austauschbarkeit von White -Raum -Separatoren, sodass die folgenden Eingaben gleichwertig sind:
a b b c | a b b c | a b b c | a b b c | a b b c |
Paare identischer Elemente geben das Vorhandensein eines Scheitelpunkts an, jedoch nicht die Bestellung (so dass der folgende einen Scheitelpunkt ohne Kanten darstellt):
a a
Streng genommen gibt es keine topologische Reihenfolge eines Diagramms, das einen oder mehrere enthält Fahrräder. Tsort druckt jedoch eine Warnung und gnu tsort druckt die erkannte Zyklen zu Standart Fehler (Zeilen beginnen mit 'Tsort:'):
$ tsort << eof> a b > B c > c a > Eof UX: Tsort: Information: Zyklus in Daten Tsort: a Tsort: b Tsort: c a b c
Siehe auch
- Sortieren (Unix)
- Machen (Software)
- Topologische Sortierung
- Liste der UNIX -Befehle
- Rufen Sie Diagramm an
Verweise
- ^ "Tsort". Die Open Group Basis Specialations Ausgabe 7, 2018 Ausgabe. Die offene Gruppe.
- ^ "Tsort Hintergrund (GNU CoreUtils 9.0)".
- ^ "Tsort".
- ^ "Tsort -Aufruf (GNU CoreUtils 9.0)".
- ^ "C ++ - GCC LD: Methode zur Bestimmung der Verbindungsreihenfolge der statischen Bibliotheken". Paketüberfluss.
Weitere Lektüre
- Knuth, Donald E. (1997). Die Kunst der Computerprogrammierung. Vol. 1 (3. Aufl.). S. 261–268. ISBN 0-201-89683-4.
- Kahn, A.B. (1962). "Topologisches Sortieren großer Netzwerke". Kommunikation der ACM. 5 (11): 558–562. doi:10.1145/368996.369025. S2CID 16728233.
Externe Links
manuelle Seite von tsort on