tsort - tsort

tsort
Első kiadás 1979 ; 42 évvel ezelőtt  ( 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
Image
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

Külső linkek

a tsort kézi oldala