tsort - tsort
| Első kiadás | 1979 |
|---|---|
| Operációs rendszer | Unix , Unix-szerű , V , Inferno |
| Felület | Cross-platform |
| típus | Parancs |
A tsort program egy parancssori segédprogram Unix és Unix-szerű platformokon, amely topológiai rendezést végez a bemenetén. 2017-től a POSIX .1 szabvány része.
Történelem
Az információs oldala szerint ezt a parancsot eredetileg az objektumfájlok sorrendjének megadására írták, amelyek lehetővé tették a linker számára, hogy szekvenciálisan (mindegyiket pontosan egyszer és sorrendben) feldolgozza. A FreeBSD kézikönyvoldal megjelenése a Unix 7-es verzióra datálódik .
Ne feledje, hogy az alábbi leírás leírja a tsort FreeBSD végrehajtásának viselkedését, és megemlíti a GNU szolgáltatásait, ahol ezek létezhetnek. Más megvalósítások vagy verziók eltérhetnek.
Szintaxis
tsort [-dlq] [FILE]
A FreeBSD beállításai a következők lehetnek:
-d turn on debugging -l search for and display the longest cycle. -q Do not display informational messages about cycles.
A GNU csak a következő lehetőségeket kínálja:
--help display help message and exit --version display version information and exit
A POSIX nem ír elő semmilyen lehetőséget.
Viselkedés
A tsort a bemenetét (az adott FÁJLból, vagy a standard bemenetből, ha nem adunk meg bemeneti fájlt, vagy a „-” FÁJL esetén) stringpárokként olvassa el , üresen elválasztva, részleges sorrendet jelölve. A kimenet egy teljes sorrend, amely megfelel az adott részrendelésnek.
Más szavakkal: egy irányított aciklikus gráfhoz (amelyet függőségi gráfként használunk ) a tsort előállítja a csúcsok felsorolását úgy, hogy az "a-> b" összes élnél az "a" a "b" elé kerül.
Példák
A tsort egy irányított aciklikus gráf csúcsait sorolja fel olyan sorrendben, hogy az összes sorrend / irány összefüggést tiszteletben tartsa :
$ 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
|
minta DAG
|
Hívási grafikon
tsort segíthet átrendezésével funkciók forrás fájlt úgy, hogy a lehető legtöbb meghatározása előtt ezeket használják (értelmezze a következőket: main() hívások parse_options() , tail_file() és tail_forever() , tail_file() hívások pretty_name() , és így tovább. Az eredmény az, hogy dump_remainder() meg kell határozni az első, start_lines() második, stb ):
$ cat call-graph
main parse_options
main tail_file
main tail_forever
tail_file pretty_name
tail_file write_header
tail_file tail
tail_forever recheck
tail_forever pretty_name
tail_forever write_header
tail_forever dump_remainder
tail tail_lines
tail tail_bytes
tail_lines start_lines
tail_lines dump_remainder
tail_lines file_lines
tail_lines pipe_lines
tail_bytes xlseek
tail_bytes start_bytes
tail_bytes dump_remainder
tail_bytes pipe_bytes
file_lines dump_remainder
recheck pretty_name
|
$ # note: 'tac' reverses the order
$ tsort call-graph | tac
dump_remainder
start_lines
file_lines
pipe_lines
xlseek
start_bytes
pipe_bytes
tail_lines
tail_bytes
pretty_name
write_header
tail
recheck
parse_options
tail_file
tail_forever
main
|
Könyvtár
A hagyományos ld (Unix linker) megköveteli, hogy a könyvtár bemeneteit topológiai sorrendben rendezzék, mivel a fájlokat egyetlen lépésben dolgozza fel. Ez vonatkozik mind a statikus könyvtárakra ( *.a ), mind a dinamikus könyvtárakra ( *.so ), és a statikus könyvtárak esetében előnyösen a benne található egyes objektumfájlokra.
A BSD UNIX a tsortot használja a tipikus ar & ranlib parancs meghívások közös részeként (az /usr/share/mk/bsd.lib.mk fájlból ):
lib${LIB}.a: ${OBJS} ${STATICOBJS}
@${ECHO} building static ${LIB} library
@${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
${RANLIB} ${.TARGET}
Itt lorder ("könyvtárrendelés") a fájlok közötti függőségi lista létrehozására szolgál a szimbólumtáblázat ellenőrzésével.
Használati megjegyzések
Figyelje meg a szóköz elválasztóinak felcserélhetőségét, hogy a következő bemenetek egyenértékűek legyenek:
a b b c |
a b b c |
a b b c |
a b b c |
a b b c |
Az azonos elemek párjai jelzik a csúcs jelenlétét, de nem rendeződnek (tehát az alábbiak egy élek nélküli csúcsot jelentenek):
a a
Szigorúan véve nincs topográfiai sorrendje egy vagy több ciklust tartalmazó grafikonnak . Azonban tsort kiír egy figyelmeztetést, és a GNU tsort kiírja a detektált ciklusok a standard hiba (vonalak kezdődő „tsort:”):
$ tsort <<EOF
> a b
> b c
> c a
> EOF
UX: tsort: INFORM: cycle in data
tsort: a
tsort: b
tsort: c
a
b
c
Lásd még
Hivatkozások
További irodalom
- Knuth, Donald E. (1997). A számítógépes programozás művészete . 1. (3. kiadás). 261–268. ISBN 0-201-89683-4 . CS1 maint: nem ajánlott paraméter ( link )
- Kahn, AB (1962). Msgstr "Nagy hálózatok topológiai rendezése". Az ACM kommunikációja . 5 (11): 558–562. doi : 10.1145 / 368996.369025 .
Külső linkek
a tsort kézi oldala