يفتقر محتوى هذه المقالة إلى مصادر موثوقة.

كوم (يونكس)

من أرابيكا، الموسوعة الحرة
اذهب إلى التنقل اذهب إلى البحث
كوم (يونكس)

أمر كوم في عائلة يونكس Unix لأنظمة تشغيل أجهزة الكمبيوتر يستخدم للمقارنة بين ملفين للخطوط الشائعة والخطوط المميزة. ويختص أمر comm. بمعايير POSIX وقد كان شائع للغاية في أنظمة التشغيل الشبيهة بيونيكس منذ منتصف الثمانينات حتى نهايتها.

الاستخدام

يقوم أمر comm. بقراءة ملفين كمدخلات ويعتبرهما خطوط نصية. يقوم comm. بإخراج ملف واحد يحتوي على ثلاث أعمدة. العمودين الأولين يتضمنان خطوطا مختلفة عن تلك الموجودة بالملفين الأول والثاني على التوالي. أما العمود الأخير فيتضمن خطوطا شائعة في كلا الملفين. وبذلك تتشابه مع diff من الناحية الوظيفية.

يتم التفرقة بين الأعمدة عبر زر tab. فإذا ما كانت الملفات المدخلة تتضمن خطوطا تبدأ بحرف وظيفته الفصل، يمكن أن تصبح النتيجة غامضة.

بالنسبة للكفاءة، فإن التنفيذ القياسي لأمر comm. يتوقع أن يتم تسلسل الملفين بنفس ترتيب الخطوط بحيث يتم تصنيفها من ناحية المفردات. يمكن استخدام أمر فرز لهذا الغرض.

يستعين لوغاريثم comm. بالتسلسل النظامي للموقع الحالي. إذا لم تكن الخطوط الموجودة بالملفات ذات تسلسل يتطابق مع الموقع الحالي، تكون النتيجة غير محددة.

رمز الرجوع

على عكس أمر ديف، فإن رمز الرجوع من أمر comm. ليس لها أي دلالة منطقية تتعلق بالعلاقة بين الملفين. فرمز الرجوع صفر يشير إلى النجاح، أما رمز الرجوع الأقل من صفر يشير إلى حدوث خطأ أثناء المعالجة.

مثال

ملفfoo

apple
banana
eggplant

ملفbar

apple
banana
banana
zucchini
comm foo bar
    apple
    banana
  banana
eggplant
  zucchini

يوضح هذا العرض أن كلا الملفين يحتويان على كلمة banana ولكن فقط ملف bar يحتوي على كلمتين banana. لمزيد من التوضيح، فإن الملف الناتج يبدو بالشكل التالي. لاحظ أن العمود يتم تفسيره بعدد أحرف tab «التبويب» الأساسية، ف /t تمثل حرف تبويب و/n تمثل خط جديد (تدوين لغة سي). المسافات الموضحة ليست جزءا من الملف الناتج.

\t \t a p p l e \n 
\t \t b a n a n a \n
\t b a n a n a \n
e g g p l a n t \n
\t z u c c h i n i \n

المقارنة مع diff

بالمعنى المتداول نجد أن أمر diff ذو استخدام أكثر قوة وشيوعا من الأمر comm.. بينما الأمر comm. الأبسط يتنسب مع الاستخدام في المخطوطات المطبعية.

الفارق الأساسي بين comm. و diff هي أن comm. يطرح جانبا المعلومات الخاصة بتسلسل السطور قبل تصنيفها.

أما الفارق الثانوي بين comm. و diff هي أن أمر comm. لا يحاول الإشارة إلى أن السطر بين الملفين «قد تغير»، فالأسطر إما تظهر بشكل أعمدة «من الملف رقم 1» أو «من الملف رقم 2» أو «في كليهما»، ويمكن أن يكون هذا مفيدا إذا ما رغب الشخص في أن يتم اعتبار كلا السطرين مختلفين حتى ولو كانت الفوارق بينهما طفيفة

خيارات أخرى

يتمتع الأمر comm. بخيارات سطر الأمر command-line options التي تخفي أي من الأعمدة الثلاثة، وهذا الأمر مفيد في الطباعة. كما يوجد أيضا خار قراءة أحد الملفات (ولكن ليس كلاهما معا) من مدخل قياسي.

الحدود

يجب أن يتم الفصل بين سطر بأكمله تقريبا وكل ملف من ملفات المدخلات خلال المقارنة بين السطور وذلك قبل كتابة السطر الناتج التالي.

بعض التطبيقات تقرأ الأسطر بوظيفة readlinebuffer () والذي لا يفرض أي حد معين لطول السطر إذا ما كانت ذاكرة النظام كافية.

بعض التطبيقات الأخرى تقرأ الأسطر بوظيفة fgets (). وهذه الوظيفة تتطلب فواصل ثابتة. في هذه التطبيقات يكون قياس هذا الفاصل تابع ل POSIX macro LINE_MAX.

انظر أيضا

مراجع