برامج Linux للبرمجة في C. البرمجة على مستوى الماجستير في C تحت Linux

برمجة Linux الأساسية مع GCC

احتل نظام التشغيل Linux منذ فترة طويلة مكانة رائدة في برامج الكمبيوتر العملاق ، ويحتل المرتبة الثانية في قطاع خادم الإنترنت ويكتسب شعبية بسرعة في قطاع الشركات. يتم تسهيل ذلك من خلال المزايا الرئيسية لنظام Linux مقارنة بأنظمة التشغيل التجارية - الكفاءة الاقتصادية العالية ، والتنقل ، والمرونة ، والظروف المثلى لتثبيت DBMS.

في دورتنا لينكس (أوبونتو). المستوى 2. البرمجة في Linux في C »سوف تكتسب المعرفة والمهارات اللازمة للتطوير برمجةلنظام التشغيل Linux سريع النمو. ستبدأ في فهم عملية إنشاء البرامج وخصائص برنامج التحويل البرمجي للغة C من دول مجلس التعاون الخليجي. سوف تتعلم كيفية فهم الاختلافات بين العمليات والخيوط ، وكيفية استخدام تعدد مؤشرات الترابط وتفاصيلها. سوف تتعلم من هم "الشياطين" وكيف تختلف عن البرامج التطبيقية.

في مركز "Specialist" Linux ، يتم تدريب Linux على مثال مجموعة التوزيع الأكثر شيوعًا Ubuntu. ومع ذلك ، سوف تدرس Linux ، وبعد التدريب في مركزنا ، يمكنك بسهولة العمل مع أي توزيعة Linux: Debian و Mandriva و Red Hat و Mint و Alt Linux و Open SUSE و ASP Linux و WSWS وغيرها الكثير.

يفي برنامج الدورة بمتطلبات المعيار المهني "مبرمج".

حسنًا " لينكس (أوبونتو). المستوى 2. البرمجة في Linux في C» متضمن في برامج تدريبية شاملة مسؤولي النظاموخبراء أمان Linux. الدراسة في برنامج شامل تحصل عليه خصم يصل إلى 15٪لعدة دورات مدرجة في البرنامج دفعة واحدة. يستعد كل برنامج تدريبي شامل على Linux للحصول على شهادة مهنية دولية

أصبح من الواضح أن الموضوع وثيق الصلة بالموضوع. تم أخذ بعض الأخطاء والأسئلة في الاعتبار ، ونتيجة لذلك ، تقرر عقد فصل دراسي ثانٍ. تمت الإضافة والتصحيح!

البرمجة على مستوى الماجستير في C تحت Linux. ندرس واجهة برمجة التطبيقات الرئيسية.

هذا البرنامج التعليمي مخصص للأشخاص الذين يرغبون في تعلم * nix API لأنظمة التشغيل المماثلة ، لا سيما في نظام Linux. هنا سننظر في ميزات التطوير في ظل نظام التشغيل Linux ، والتي تشمل:


  • الإلمام بعملية بناء البرمجيات وخصوصيات مترجم لغة سي من دول مجلس التعاون الخليجي

  • تطوير واستخدام المكتبات المشتركة

  • برامج التصحيح

  • استكشاف آليات إدخال / إخراج الملفات ذات المستوى المنخفض

  • دراسة آليات ضمان تعدد المهام والتواصل بين العمليات

  • استخدام مآخذ توصيل الملفات والشبكات

  • دراسة آلية الإشارات وتطبيقها

  • دراسة العمليات والخيوط واختلافها واستخدام تعدد الخيوط ودراسة آليات تزامن الخيوط ومشاكلها

  • خلق الشياطين وتعلم الفرق بين الشياطين والبرامج التطبيقية

  • استكشاف ميزات I / O لوحدة التحكم

  • ملفات الذاكرة المعينة وكيفية استخدامها

هذه الفئة الرئيسية مخصصة بشكل أساسي لمطوري البرامج والمهندسين والمبرمجين والهواة فقط المهتمين بالجهاز وخصائص نظام التشغيل Linux.

متطلبات المشاركين في الفصل الرئيسي: معرفة لغة C على مستوى الكتاب ب. كيرنيغان ، د. ريتشي "لغة سي".

ستكون تكلفة هذه الفئة الرئيسية 6000 روبل.

المكان هو مدينة موسكو ، في مقر Hackspace Neuron.
التواريخ: من 4 يوليو (الاثنين) إلى 7 يوليو (الخميس) من الساعة 10 صباحًا حتى الساعة 5 مساءً مع استراحة غداء واستراحة لتناول الشاي / القهوة.

لم يتم التخطيط للبث عبر الإنترنت.
عدد الأفراد في المجموعة: 8-10.

يتم التسجيل في بريد إلكتروني [بريد إلكتروني محمي]أو التعليق على هذه الوظيفة. مطلوب اسمك الكامل للتسجيل. (بالكامل) وتفاصيل الاتصال (رقم الهاتف والبريد). من المستحسن وصف الغرض من حضور هذه الفئة الرئيسية ، ومستوى التدريب والمهنة.

برنامج الدورة التفصيلية:

الوحدة 1: مقدمة


  • الإلمام بتفاصيل بناء البرمجيات في جنو / لينكس

  • التعرف على محررات نصوص وحدة التحكم (vi، nano، mcedit)

  • العمل مع مصحح أخطاء gdb

  • تجميع البرامج اليدوي والآلي (Makefile)

  • نموذج خادم واجهة العميل (CIS)

  • مبنى مكتبة ثابت

  • المكتبات المشتركة

  • العمل مع متغيرات البيئة

الوحدة 2: عمليات الإدخال / الإخراج والملفات منخفضة المستوى

  • نظرة عامة على آليات Linux I / O (Ubuntu)

  • واصفات الملف

  • مكالمات النظام: افتح ، أغلق ، اكتب ، اقرأ ، و lseek

  • أنواع الملفات

  • Inodes والروابط الصلبة

  • أذونات الملف

  • نظام ملفات proc

  • طريقتان لقراءة محتويات الدليل

  • ملفات متفرقة وتفاصيل استخدامها

  • مناطق الحظر من الملف

الوحدة 3

  • آليات اتصال Linux Interprocess (أوبونتو)

  • أنابيب بدون اسم (أنابيب)

  • الأنابيب المسماة

  • الرسائل (قائمة انتظار الرسائل)

  • ذكريات مشتركه

  • إشارات

الوحدة 4

  • مآخذ في مساحة اسم ملف (مآخذ UNIX)

  • إقران المقابس

  • مآخذ الشبكة (المقابس)

الوحدة 5. الإشارات

  • مقدمة في الإشارات

  • كيف تختلف الإشارات عن آليات الاتصال بين العمليات الأخرى

  • تفاصيل التعامل مع الإشارة

  • الوحدة 6

  • عمليات الاستنساخ - fork ()

  • استبدال عملية التنفيذ - exec ()

  • الزومبي (الزومبي) - أسباب وطرق القضاء عليهم

الوحدة 7

  • المواضيع والعمليات

  • تفاصيل بناء تطبيقات متعددة مؤشرات الترابط (multithreading)

  • إنهاء موضوع مبكرًا

الوحدة 8 - المواضيع (تابع)

  • قم بإنشاء معالج إنهاء مؤشر الترابط

  • مزامنة الأوليات

  • سمات الدفق

الوحدة 9: Daemons (الخدمات)

  • الفرق بين البرنامج الخفي وأداة وحدة التحكم

  • تفاصيل تطوير Daemons

  • إنشاء برنامج خفي باستخدام مآخذ الشبكة

الوحدة 10: وحدة التحكم I / O

  • تفاصيل تطوير تطبيقات وحدة التحكم

  • منع إعادة توجيه الإخراج

  • إدارة المحطة

  • إخفاء كلمة مرور المستخدم أثناء المصادقة

  • التحكم في المحطة الطرفية مع تسلسلات ESC

الوحدة 11

  • عرض ملف عادي

  • مشاركة ملف

  • شاشات خاصة

  • استخدامات أخرى لـ mmap

الوحدة 12

  • تفاصيل تطوير تطبيقات 64 بت

  • استخدام مكتبة ncurses

قائد الدورة: سيرجي دولين. مهندس إلكتروني ، مطور برامج Linux (تطبيقي ، اختبار برمجيات للأجهزة ، برامج تشغيل). مطور برامج مضمن. مبرمج لينكس منذ 2011. عملت في OAO NICEVT، JSC Concern Systemprom، OOO PROSOFT (في شركة تابعة لشركة Dolamant).

لقد كتبت بالفعل عن كيفية تثبيت مترجم C و C ++ كامل على Windows في المقالة :.

لكن هذه اللغات متعددة المنصات ، علاوة على ذلك ، يستخدم الكثيرون Linux ليس فقط كنظام منزلي ، ولكن أيضًا كأداة عمل. بالإضافة إلى ذلك ، زادت النسبة في السنوات الأخيرة. مستخدمو Linux. ويريد الكثير منهم تعلم البرمجة. لذلك ، سأخبرك اليوم بكيفية تثبيت برنامج التحويل البرمجي C و C ++ على نظام Linux.


إذا كنت تستخدم Windows ولكنك تريد تجربة Linux ، فراجع مقالاتي على سطح المكتب الافتراضي :.

لذلك ، تم تثبيت Linux ، وتم توصيل الإنترنت. افتح وحدة التحكم واكتب أمر تثبيت المترجم.
sudo apt-get install gcc g ++

هذا كل شيء ، يتم تثبيت المجمعين. الآن يبقى التحقق.
نذهب إلى المجلد الرئيسي وننشئ ملف hello.c ، ونفتحه ونكتب برنامجًا بسيطًا:

#include main () (printf ("Hello \ n")؛)

ثم افتح وحدة التحكم وقم بترجمة البرنامج النصي في برنامج:
$ دول مجلس التعاون الخليجي hello.c -o hello

كل شيء ، يجب أن يظهر برنامج hello في المجلد. الآن دعنا نديرها.
$. / مرحبًا

لكن البرمجة في مفكرة بسيطة والتجميع في وحدة التحكم يعد تحريفًا خاصًا. نحتاج أيضًا إلى IDE عادي إلى حد ما للبرمجة في C و C ++ مع مترجم مدمج.

إذا قرأت مقالتي ، فأنت تفهم ما أتحدث عنه. نعم ، سنقوم بتثبيت Geany. إنها بيئة تطوير رائعة للعديد من اللغات. كتابة برامج وحدة التحكم فيه لمن دواعي سروري.
افتح وحدة التحكم واكتب:
sudo apt-get install geany

نحن نتفق مع التثبيت وننتظر اكتماله. ثم نبدأ البرنامج.

نقوم بفتح نفس الملف hello.c فيه وتعديله قليلا ، ثم الضغط على الزر المماثل لبنة "إنشاء الملف الحالي" وتشغيل الزر الأحمر "عرض أو تشغيل الملف الحالي". وسيكون لدينا نافذة وحدة التحكم بالنتيجة.

الأدوات المستخدمة تقليديًا لكتابة البرامج لأنظمة التشغيل المفتوحة هي أدوات مطور جنو. دعونا نفعل القليل من الخلفية التاريخية. تأسس مشروع جنو عام 1984 على يد ريتشارد ستالمان. كانت ضرورتها ترجع إلى حقيقة أن التعاون بين المبرمجين في ذلك الوقت كان صعبًا ، حيث وضع أصحاب البرمجيات التجارية عقبات عديدة لمثل هذا التعاون. كان الهدف من مشروع جنو إنشاء مجموعة من البرامج بموجب ترخيص واحد لا يسمح لأي شخص بتعيين الحقوق الحصرية لهذا البرنامج. جزء من هذه المجموعة هو مجموعة أدوات المطور التي سنستخدمها ، والتي يجب تضمينها مع جميع توزيعات Linux.

أحد هذه الأدوات هو مترجم GCC. هذا الاسم المختصر كان في الأصل لـ GNU C Compiler. هذا يعني الآن - GNU Compiler Collection.

لنقم بإنشاء أول برنامج باستخدام GCC. حسب التقليد ، سيقوم البرنامج الأول ببساطة بطباعة التحية "Hello world!" - "مرحبا بالعالم!".

ملفات التعليمات البرمجية المصدر للبرامج التي سننشئها هي ملفات نصية عادية ويمكن إنشاؤها باستخدام أي محرر نصوص (مثل GEdit KWrite و Kate ومستخدمي Linux الأكثر تقليدية vi و emacs). بالإضافة إلى برامج تحرير النصوص ، هناك بيئات تطوير متخصصة بها برامج تحرير مدمجة خاصة بها. إحدى هذه الأدوات هي KDevelop. ومن المثير للاهتمام ، أنه يحتوي على محرر مدمج ووحدة تحكم مدمجة تقع أسفل المحرر مباشرة. لذلك يمكنك مباشرة في برنامج واحد ، دون التبديل بين النوافذ ، وتحرير الكود وإعطاء أوامر وحدة التحكم.

قم بإنشاء دليل ترحيب منفصل. سيكون هذا أول دليل مشروع لدينا. في ذلك خلق ملف نصي hello.c بالنص التالي:

#يشمل

printf ("Hello world! \ n")؛

ثم في وحدة التحكم ، انتقل إلى دليل المشروع. اطلب فريقًا

الآن انظر عن كثب إلى ما حدث. ظهر ملف a.out جديد في الدليل. هذا هو الملف القابل للتنفيذ. دعونا نطلقها. اكتب في وحدة التحكم:

يجب أن يبدأ البرنامج ، أي يجب أن يظهر النص:

يقوم برنامج التحويل البرمجي لدول مجلس التعاون الخليجي بتعيين الاسم a.out لجميع الملفات التنفيذية التي تم إنشاؤها افتراضيًا. إذا كنت تريد تسميته بشكل مختلف ، فأنت بحاجة إلى إضافة العلامة -o والاسم الذي تريد تسميته إلى أمر الترجمة. لنكتب الأمر التالي:

دول مجلس التعاون الخليجي hello.c -o hello

نرى أن ملفًا قابلاً للتنفيذ يسمى hello قد ظهر في الدليل. دعونا نطلقها.

كما ترى ، النتيجة هي نفس الملف القابل للتنفيذ ، فقط باسم مناسب لنا.

العلامة -o هي واحدة من العديد من أعلام المترجمين في دول مجلس التعاون الخليجي. سيتم مناقشة بعض الأعلام الأخرى لاحقًا. يمكنك استخدام نظام man help لرؤية جميع العلامات الممكنة. اكتب في سطر الأوامر:

سيتم تقديمك مع نظام مساعدة لهذا البرنامج. راجع ما تعنيه كل علامة. سنلتقي ببعض منهم قريبا. تم الخروج من نظام التعليمات باستخدام مفتاح q.

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

الحقيقة هي أننا إذا قمنا بكتابة اسم الملف القابل للتنفيذ فقط ، فسيقوم نظام التشغيل بالبحث عنه في الدلائل / usr / bin و / usr / local / bin ، ولن يعثر عليه بالطبع. الدلائل / usr / bin و / usr / local / bin هي أدلة النظام حيث توجد البرامج القابلة للتنفيذ. الأول مصمم لاستيعاب إصدارات مستقرةيتم تضمينها عادةً في توزيعة Linux. والثاني للبرامج التي يقوم المستخدم بتثبيتها بنفسه (والتي لا يضمن أحد استقرارها). هناك حاجة إلى مثل هذا النظام لفصلهم عن بعضهم البعض. بشكل افتراضي ، يتم تثبيت البرامج على الدليل / usr / local / bin عند إنشائها. من غير المرغوب فيه وضع أي شيء إضافي في / usr / bin أو حذف أي شيء من هناك يدويًا ، لأن هذا قد يؤدي إلى تعطل النظام. يجب أن تكون هناك برامج ، يكون مطورو التوزيع مسؤولين عنها.

لتشغيل برنامج موجود في مكان آخر ، يجب عليك تحديد المسار الكامل إليه ، على النحو التالي:

/ home / dima / projects / hello / hello

أو خيارًا آخر: اكتب المسار المتعلق بالدليل الحالي الذي أنت فيه حاليًا في وحدة التحكم. في هذه الحالة ، تعني نقطة واحدة الدليل الحالي ، نقطتان - الأصل. على سبيل المثال ، يقوم الأمر. الدليل الحالي.

إمكانية الإضافة إلى القائمة مسارات النظامأدلة إضافية للبرامج. للقيام بذلك ، تحتاج إلى إضافة مسار جديد إلى النظام متغير PATH. لكن دعونا لا نستغني عن الموضوع الرئيسي في الوقت الحالي. متغيرات البيئة محادثة منفصلة.

لنلق نظرة الآن على ما يفعله برنامج دول مجلس التعاون الخليجي. يتضمن عملها ثلاث مراحل: المعالجة المسبقة والتجميع والربط (أو الربط).

يتضمن المعالج المسبق محتويات جميع ملفات الرأس المحددة في التوجيهات #include في الملف الرئيسي. تحتوي ملفات الرأس عادةً على إعلانات عن الوظائف المستخدمة في البرنامج ، ولكن لم يتم تعريفها في نص البرنامج. توجد تعريفاتهم في مكان آخر: إما في ملفات مصدر أخرى أو في مكتبات ثنائية.

المرحلة الثانية هي التجميع. يتمثل في تحويل نص البرنامج بلغة C / C ++ إلى مجموعة من إرشادات الجهاز. يتم تخزين النتيجة في ملف كائن. بالطبع ، على الأجهزة ذات بنى المعالج المختلفة ، يتم الحصول على الثنائيات بتنسيقات مختلفة ، ومن المستحيل على جهاز واحد تشغيل ثنائي مبني على جهاز آخر (ما لم يكن لديهم نفس بنية المعالج ونفس أنظمة التشغيل). لهذا السبب يتم توزيع برامج الأنظمة المشابهة لـ UNIX كرموز مصدر: يجب أن تكون متاحة لجميع المستخدمين ، بغض النظر عمن لديه أي معالج وأي نظام تشغيل.

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

الآن دعونا نرى كيف يبدو الأمر كله عمليًا. لنكتب برنامج آخر. ستكون الآلة الحاسبة الأكثر بدائية القادرة على الجمع والطرح والضرب والقسمة. عند إطلاقه ، سيطلب منك رقمين لتشغيلهما ، ثم يطلب منك إدخال علامة العملية الحسابية. يمكن أن تتكون من أربعة أحرف: "+" ، "-" ، "*" ، "/". بعد ذلك ، يعرض البرنامج النتيجة ويتوقف (يعود بنا إلى نظام التشغيل، أو بالأحرى مترجم الأوامر ، الذي أطلقنا منه اسم البرنامج).

لنقم بإنشاء المشروع ملف جديد kalkul ، سننشئ ملف kalkul.c فيه.

#يشمل

printf ("الرقم الأول:") ؛

scanf ("٪ f"، & num1) ؛

printf ("الرقم الثاني:") ؛

scanf ("٪ f"، & num2) ؛

printf ("عامل التشغيل (+ - * /):") ؛

بينما ((المرجع = getchar ())! = EOF)

printf ("٪ 6.2f \ n" ، num1 + num2) ؛

وإلا إذا (المرجع == "-")

printf ("٪ 6.2f \ n" ، num1 - num2) ؛

وإلا إذا (المرجع == "*")

printf ("٪ 6.2f \ n" ، num1 * num2) ؛

وإلا إذا (op == "/")

printf ("خطأ: قسمة على صفر! \ n")؛

استراحة؛

printf ("٪ 6.2f \ n" ، num1 / num2) ؛

لذلك ، أولاً وقبل كل شيء ، كما قيل ، يتم تنفيذ المعالجة المسبقة. من أجل معرفة ما يتم القيام به في هذه المرحلة ، سنستخدم الخيار -E. يوقف هذا الخيار تنفيذ البرنامج في مرحلة المعالجة بواسطة المعالج المسبق. والنتيجة هي ملف مصدر الرمزمع محتويات ملفات الرأس المضمنة فيه.

في حالتنا ، قمنا بتضمين ملف رأس واحد - stdio.h - مجموعة الميزات القياسيةالمدخلات والمخرجات. تقوم هذه الوظائف بإخراج النص المطلوب إلى وحدة التحكم ، وكذلك قراءة الكلمات التي ندخلها من وحدة التحكم.

أدخل الأمر التالي:

دول مجلس التعاون الخليجي -E kalkul.c -o kalkul.cpp

قمنا بتسمية الملف الناتج kalkul.cpp. افتحه. يرجى ملاحظة أنه طويل جدًا. هذا بسبب تضمينه جميع التعليمات البرمجية في ملف الرأس stdio.h. بالإضافة إلى ذلك ، أضاف المعالج المسبق هنا بعض العلامات التي تخبر المترجم كيفية التواصل مع الوظائف المعلنة. النص الرئيسي لبرنامجنا مرئي فقط في الأسفل.

يمكنك أيضًا معرفة الوظائف الأخرى التي تم الإعلان عنها في ملف الرأس stdio.h. إذا كنت تريد معلومات حول وظيفة معينة ، فيمكنك أن تسأل عنها في الرجل المدمج. على سبيل المثال ، إذا كنت تريد فجأة معرفة وظيفة الوظيفة الغامضة fopen ، فيمكنك كتابة:

هناك أيضًا الكثير من المعلومات في نظام المساعدةمعلومات.

يمكنك أيضًا السؤال عن ملف الرأس بالكامل مرة واحدة.

دعنا الآن نلقي نظرة على المرحلة التالية. لنقم بإنشاء ملف كائن. ملف الكائن هو ترجمة "حرفية" لكود برنامجنا إلى لغة الآلة ، ولكن بدون ربط الوظائف المسماة بتعريفاتها. يستخدم الخيار -c لإنشاء ملف كائن.

يمكن حذف اسم الملف الناتج ، لأن المترجم يأخذ ببساطة اسم الملف المصدر ويغير الامتداد .c إلى .o (يمكنك تحديد ما إذا كنا نريد تسميته بشكل مختلف).

إذا كنا بصدد إنشاء ملف كائن من مصدر تمت معالجته بالفعل بواسطة المعالج المسبق (مثل الذي حصلنا عليه أعلاه) ، فيجب أن نشير صراحة إلى أن الملف الذي يتم تجميعه هو ملف شفرة مصدر تمت معالجته بواسطة المعالج المسبق ولديه علامات المعالج المسبق. خلاف ذلك ، ستتم معالجته مثل ملف C ++ عادي ، بدون علامات المعالج المسبق ، مما يعني أنه لن يتم إنشاء العلاقة مع الوظائف المعلنة. يتم استخدام الخيار -x للإشارة صراحة إلى لغة وتنسيق الملف قيد المعالجة. يتم الإشارة إلى ملف C ++ الذي تمت معالجته بواسطة المعالج المسبق بواسطة cpp-output.

دول مجلس التعاون الخليجي -x cpp-output -c kalkul.cpp

أخيرًا ، الخطوة الأخيرة هي التخطيط. نحصل على الملف القابل للتنفيذ من ملف الكائن.

دول مجلس التعاون الخليجي kalkul.o -o kalkul

يمكنك تشغيله.

تسأل: "لماذا كل هذا العناء مع الخطوات الوسيطة؟ ألن يكون من الأفضل تشغيل kalkul.c -o kalkul مجلس التعاون الخليجي مرة واحدة فقط؟ "

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

ديمتري بانتيليشيف (dimanix2006 at rambler dot ru) - مقدمة لمجمع دول مجلس التعاون الخليجي

تحميل...
قمة