Jump to content

сортировать

(Перенаправлено с Цорт (Unix) )
сортировать
Первоначальный выпуск 1979 год ; 45 лет назад ( 1979 )
Операционная система Unix , Unix-подобные , V , Inferno
Платформа Кросс-платформенный
Тип Команда

Программа tsort — это утилита командной строки на Unix и Unix-подобных платформах, которая выполняет топологическую сортировку входных данных. По состоянию на 2017 год , это часть стандарта POSIX .1. [ 1 ]

По его информации [ 2 ] Эта команда изначально была написана для обеспечения упорядочивания объектных файлов, что позволяло компоновщику обрабатывать их последовательно (каждый ровно один раз и по порядку). Страница руководства FreeBSD датируется своим появлением в версии 7 Unix . [ 3 ]

Обратите внимание, что следующее описание описывает поведение реализации tsort во FreeBSD и упоминает функции GNU, где они могут существовать. Другие реализации или версии могут отличаться.

Синтаксис

[ редактировать ]
tsort [-dlq] [FILE]

Опции FreeBSD могут быть:

-d         turn on debugging
-l         search for and display the longest cycle.
-q         Do not display informational messages about cycles.

GNU предоставляет только следующие опции:

--help     display help message and exit
--version  display version information and exit

POSIX не предписывает никаких опций.

Поведение

[ редактировать ]

tsort считывает свои входные данные (из заданного ФАЙЛА или стандартного ввода , если входной файл не указан или для ФАЙЛА со значением «-») как пары строк, разделенных пробелами, что указывает на частичный порядок. Результатом является общий порядок, соответствующий заданному частичному порядку. [ 4 ]

Другими словами: для ориентированного ациклического графа (используемого в качестве графа зависимостей ) tsort выдает список вершин так, чтобы для всех ребер «a->b» «a» стояло в листинге перед «b».

tsort перечисляет вершины ориентированного ациклического графа в таком порядке, что соблюдаются все отношения порядка/направления:

$ 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
образец ДЕНЬ

График звонков

[ редактировать ]

tsort может помочь переупорядочить функции в исходном файле, чтобы как можно больше их было определено до их использования (интерпретируйте следующее как: main() звонки parse_options(), tail_file() и tail_forever(); tail_file() звонки pretty_name(), и так далее. В результате dump_remainder() должны быть определены в первую очередь, start_lines() второй и т. д.):

$ 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

Библиотека

[ редактировать ]

Традиционный ld (компоновщик Unix) требует, чтобы входные данные библиотеки были отсортированы в топологическом порядке, поскольку он обрабатывает файлы за один проход. Это относится как к статическим библиотекам ( *.a) и динамические библиотеки ( *.so), а в случае статических библиотек — предпочтительно для отдельных объектных файлов, содержащихся в них. [ 5 ]

BSD UNIX использует tsort как обычную часть типичных вызовов команд ar и ranlib (из /usr/share/mk/bsd.lib.mk):

lib${LIB}.a: ${OBJS} ${STATICOBJS}
    @${ECHO} building static ${LIB} library
    @${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
    ${RANLIB} ${.TARGET}

Здесь lorder («библиотечный порядок») используется для создания списка межфайловых зависимостей путем проверки таблицы символов.

Примечания по использованию

[ редактировать ]

Обратите внимание на взаимозаменяемость пробельных разделителей, поэтому следующие входные данные эквивалентны:

a b
b c
a b b
c
a
b b c
a b b c
a
b
b
c

Пары одинаковых элементов указывают на наличие вершины, но не на порядок (поэтому следующее представляет собой одну вершину без ребер):

a a

Строго говоря, не существует топологического упорядочения графа, содержащего один или несколько циклов . Однако tsort выводит предупреждение, а GNU tsort выводит обнаруженные циклы в стандартную ошибку (строки, начинающиеся с '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

См. также

[ редактировать ]
  1. ^ "цорт" . Базовые спецификации открытой группы, выпуск 7, издание 2018 г. Открытая группа.
  2. ^ «Цортировка фона (GNU Coreutils 9.0)» .
  3. ^ «Цорт» .
  4. ^ «Вызов Tsort (GNU Coreutils 9.0)» .
  5. ^ «c++ — gcc ld: метод определения порядка компоновки статических библиотек» . Переполнение стека .

Дальнейшее чтение

[ редактировать ]
[ редактировать ]

Страница руководства по tsort на

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 53fb869f87970325966afa942eea4fea__1691905080
URL1:https://arc.ask3.ru/arc/aa/53/ea/53fb869f87970325966afa942eea4fea.html
Заголовок, (Title) документа по адресу, URL1:
tsort - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)