فرز
برنامج tsort هو أداة سطر أوامر تعمل على أنظمة يونكس والأنظمة الشبيهة بيونكس ، وتُجري عملية فرز طوبولوجي على مُدخلاتها. وهو جزء من معيار POSIX .1. [ 1 ] ، وظل كذلك منذ إصدار المواصفات الموحدة لنظام يونكس، الإصدار 2. [ 2 ]
تاريخ
بحسب صفحة المعلومات [ 3 ] ، كُتب هذا الأمر في الأصل لتوفير ترتيب لملفات الكائنات يسمح للرابط بمعالجتها بالتسلسل (كل ملف مرة واحدة فقط، وبالترتيب). ويشير دليل FreeBSD إلى أن ظهوره يعود إلى الإصدار 7 من نظام يونكس . [ 4 ]
لاحظ أن الوصف التالي يصف سلوك تطبيق tsort في نظام FreeBSD ، ويشير إلى ميزات GNU حيثما وجدت. قد تختلف التطبيقات أو الإصدارات الأخرى.
بناء الجملة
tsort [-dlq] [FILE]
يمكن أن تكون خيارات FreeBSD كالتالي:
-d تفعيل وضع التصحيح -l البحث عن أطول دورة وعرضها. -q عدم عرض الرسائل المعلوماتية حول الدورات.
يوفر نظام جنو الخيارات التالية فقط:
--help عرض رسالة المساعدة والخروج --version عرض معلومات الإصدار والخروج
لا توجد خيارات محددة من قبل نظام POSIX.
سلوك
يقرأ برنامج tsort مدخلاته (من الملف المُعطى، أو المدخلات القياسية في حال عدم وجود ملف إدخال أو في حال كان الملف هو '-') على شكل أزواج من السلاسل النصية، مفصولة بمسافات، مما يشير إلى ترتيب جزئي. ويكون الناتج ترتيبًا كليًا يُطابق الترتيب الجزئي المُعطى. [ 5 ]
بمعنى آخر: بالنسبة للرسم البياني الموجه غير الدوري (المستخدم كرسم بياني للاعتماد )، ينتج 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 | ملاحظة : 'tac' يعكس الترتيب $ 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 ) في أنظمة يونكس أن تكون مدخلات المكتبات مرتبة ترتيبًا طوبولوجيًا، لأنه يعالج الملفات في دورة واحدة. ينطبق هذا على كل من المكتبات الثابتة ( *.a) والمكتبات الديناميكية ( *.so)، وفي حالة المكتبات الثابتة، يُفضل أن ينطبق على ملفات الكائنات الفردية الموجودة بداخلها. [ 6 ]
يستخدم نظام BSD UNIX برنامج tsort كجزء مشترك من استدعاءات أوامر ar و ranlib النموذجية (من /usr/share/mk/bsd.lib.mk):
lib${LIB}.a : ${ OBJS } ${ STATICOBJS } @ ${ ECHO } بناء مكتبة ثابتة ${ LIB } @ ${ AR } cq ${ .TARGET } ` lorder ${ OBJS } ${ STATICOBJS } | tsort -q ` ${ ARADD } ${ RANLIB } ${ .TARGET }هنا lorderيتم استخدام (ترتيب المكتبة) لإنشاء قائمة التبعية بين الملفات عن طريق فحص جدول الرموز.
ملاحظات الاستخدام
لاحظ إمكانية استبدال فواصل المسافات البيضاء، لذا فإن المدخلات التالية متكافئة:
أب قبل الميلاد | أب ج | أ بي بي سي | أبك | أ ب ب ج |
تشير أزواج العناصر المتطابقة إلى وجود رأس، ولكن ليس إلى الترتيب (لذا يمثل ما يلي رأسًا واحدًا بدون حواف):
aa
بالمعنى الدقيق، لا يوجد ترتيب طوبولوجي للرسم البياني الذي يحتوي على دورة واحدة أو أكثر . ومع ذلك، يُصدر برنامج tsort تحذيرًا، بينما يُظهر برنامج GNU tsort الدورات المكتشفة مع الخطأ المعياري (الأسطر التي تبدأ بـ 'tsort:').
$ tsort <<EOF > ab > bc > ca > EOF UX: tsort: INFORM: دورة في البيانات tsort: a tsort: b tsort: c a b cانظر أيضاً
بوسيكس
منذ عام 1997 وحتى عام 2024، لم يقبل إصدار POSIX من برنامج tsort أي وسيطات سوى اسم ملف اختياري يحتوي على بيانات الإدخال (يقرأ البرنامج من المدخلات القياسية إذا لم يتم تحديد ملف). أما في إصدار 2024، فقد أضاف POSIX وسيطة اختيارية -w تُشير إلى عدد الحلقات الموجودة في حالة خروج الأمر.
مراجع
- ↑ "tsort" . المواصفات الأساسية لمجموعة Open Group، الإصدار 8، طبعة 2024. مجموعة Open Group.
- ↑ "tsort" . مواصفات UNIX® الموحدة، الإصدار 2. مجموعة Open Group.
- ↑ "Tsort background (GNU Coreutils 9.0)" .
- ↑ "Tsort" .
- ↑ "استدعاء Tsort (GNU Coreutils 9.0)" .
- ↑ "c++ - gcc ld: طريقة لتحديد ترتيب ربط المكتبات الثابتة" . Stack Overflow .
للمزيد من القراءة
- كنوت، دونالد إي. (1997). فن برمجة الحاسوب . المجلد 1 ( الطبعة الثالثة). الصفحات 261-268 . ISBN 0-201-89683-4.
- كان، أ.ب. (1962). "الفرز الطوبولوجي للشبكات الكبيرة" . اتصالات رابطة مكائن الحوسبة . 5 (11): 558-562 . doi : 10.1145/368996.369025 . S2CID 16728233 .
روابط خارجية
صفحة الدليل الخاصة بـ tsort on
- فري بي إس دي ،
- أوبن بي إس دي ،
- تمت أرشفة NetBSD بتاريخ 2016-06-03 على موقع Wayback Machine .
- AIX ،
- سولاريس ،
- HP-UX
- يقوم برنامج dep-trace بترتيب التبعيات الأساسية وفكّ التبعيات المتداخلة. (أساسي: بدون افتراض وجود رسومات ثنائية الأبعاد)
- أدوات يونكس SUS2008
- أوامر نظام التشغيل إنفيرنو

