برمجة نظام هارت في بيئة ويندوز. برمجة أنظمة ويندوز: جونسون هارت

برمجة نظام هارت في بيئة ويندوز. برمجة أنظمة ويندوز: جونسون هارت

هذا الكتاب مخصص لتطوير التطبيقات باستخدام واجهة برمجة التطبيقات لأنظمة تشغيل مايكروسوفت (Windows 9x، Windows XP، Windows 2000 وWindows 9x). مشغل برامج وندوز 2003). ينصب التركيز على خدمات النظام الأساسية، بما في ذلك نظام الملفات، وإدارة العمليات والخيوط، والاتصال بين العمليات، وبرمجة الشبكة، والمزامنة. يتم أخذ تقنية نقل التطبيقات المكتوبة في بيئة Win32 إلى بيئة Win64 بعين الاعتبار. يتم وصف كافة جوانب أمان Windows وتطبيقه العملي بالتفصيل. إن وفرة الأمثلة الواقعية، المتوفرة أيضًا على موقع الكتاب الإلكتروني، تبسط عملية تعلم المادة إلى حد كبير.

يستهدف الكتاب المطورين والمبرمجين، سواء من ذوي المؤهلات العالية أو المبتدئين، وسيكون مفيدًا أيضًا للطلاب في التخصصات ذات الصلة.

مقدمة

يصف هذا الكتاب تطوير التطبيقات باستخدام واجهة برمجة التطبيقات (API) لأنظمة تشغيل Microsoft Windows، مع التركيز على خدمات النظام الأساسية، بما في ذلك نظام الملفات، وإدارة العمليات والخيوط، والاتصال بين العمليات، وبرمجة الشبكات، والمزامنة. لا يتم تناول واجهات المستخدم والمكونات الداخلية لـ Windows وبرامج تشغيل الإدخال/الإخراج في هذا الكتاب، على الرغم من أن هذه المواضيع لها نفس القدر من الأهمية ومثيرة للاهتمام في حد ذاتها. وكانت الأمثلة في الغالب مبنية على سيناريوهات واقعية، وبالتالي يمكن أن يكون الكثير منها بمثابة أساس لبناء تطبيقات الحياة الواقعية.

يتم دعم Win32/Win64 API، أو Windows API بشكل عام، من قبل عائلة Microsoft المكونة من أنظمة تشغيل 32 و64 بت، والتي تتضمن حاليًا Windows XP وWindows 2000 وWindows Server 2003. ومن بين الأعضاء الأوائل في هذه العائلة أنظمة ويندوز NT وWindows Me وWindows 98 وWindows 95؛ تعتبر هذه الأنظمة الآن قديمة، ولكن العديد من أمثلة البرامج الواردة في الكتاب يمكن تشغيلها تحت سيطرتها. تتم مناقشة الانتقال من النظام الأساسي Win32 إلى النظام الأساسي Win64 المتطور حسب الضرورة. Win64، المدعوم كواجهة 64 بت في بعض إصدارات Windows Server 2003 وWindows XP، مطابق تقريبًا لـ Win32.

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

أولاً، نحتاج أن نخبرك ما هي Windows API وأن نوضح لك كيفية استخدامها في مواقف الحياة الواقعية، مع إبقاء هذه القصة قصيرة قدر الإمكان وغير مثقلة بالتفاصيل غير الضرورية. لذلك، ليس المقصود من هذا الكتاب أن يستخدم كملف دليل مرجعيولكن للتعرف على الخصائص الأساسية لأهم الوظائف وإظهار إمكانيات استخدامها في مواقف البرمجة العملية. مسلحًا بهذه المعرفة، يمكن للقارئ الاستفادة من الوثائق المرجعية الشاملة التي تقدمها Microsoft لمواصلة دراسته المتعمقة. القضايا الفرديةوقدرات موسعة ووظائف أقل وضوحًا وفقًا للاحتياجات أو الاهتمامات الناشئة. شخصيًا، مع هذا النهج، كان تعلم Windows API أمرًا سهلاً بالنسبة لي، وكان تطوير برامج Windows أمرًا ممتعًا للغاية، على الرغم من وجود بعض اللحظات غير السارة أيضًا. يمكن رؤية نوبات الحماس الخاصة بي بسهولة في بعض الأماكن في الكتاب، وهو أمر ليس مفاجئًا في الواقع. ومع ذلك، فإن هذا لا يشير على الإطلاق إلى أنني أتفق دون قيد أو شرط مع تفوق Windows API على واجهات برمجة التطبيقات لأنظمة التشغيل الأخرى (OS)، ولكن من غير المرجح أن يعترض أي شخص على حقيقة أنه يحتوي على الكثير من الصفات الإيجابية.

يكرس مؤلفو العديد من الكتب حول Windows اهتمامًا كبيرًا لشرح ماهية العمليات، ذاكرة افتراضية، التواصل بين العمليات، جدولة وقائية، ولكن لا تظهر كيف يتم استخدام كل هذا في المواقف الحقيقية. المبرمجون الذين لديهم خبرة في العمل مع UNIX وLinux وIBM MVS وOpen VMS وبعض أنظمة التشغيل الأخرى على دراية بهذه المفاهيم، وهم مهتمون فقط بالانتقال إلى تعلم كيفية تنفيذ هذه الميزات في Windows في أسرع وقت ممكن. بالإضافة إلى ذلك، تركز معظم كتب Windows بشكل كبير على تقنيات البرمجة المعتمدة على واجهة المستخدم. من أجل التركيز فقط على أهم الإمكانيات الأساسية التي يوفرها النظام، لا يتطرق هذا الكتاب إلى موضوع واجهة المستخدم، ونقتصر على مناقشة إدخال/إخراج أحرف وحدة التحكم البسيطة فقط.

وجهة النظر الموضحة في هذا الكتاب هي أن Windows مجرد واجهة برمجة تطبيقات. نظام التشغيل، والذي يوفر مجموعة من الأدوات المفهومة تمامًا. يشعر العديد من المبرمجين، بغض النظر عن مستوى خبرتهم، بالحاجة إلى تسريع تعلمهم لنظام Windows، وبدون المعرفة بنظام Windows، لا يمكن التفكير في مناقشة موضوعات مثل Component Object Model (COM) الذي طورته Microsoft. في بعض النواحي، تتفوق أنظمة Windows على الأنظمة الأخرى، وفي حالات أخرى، تتخلف عن الركب أو تكون على حالها تقريبًا. الهدف من هذا الكتاب هو توضيح كيفية استخدام هذه القدرات على أفضل وجه في مواقف العالم الحقيقي لتطوير تطبيقات مفيدة وعالية الجودة وعالية الأداء.

الجمهور المحتمل

أي شخص يريد أن يتعلم بسرعة كيفية تطوير التطبيقات، بغض النظر عن مستوى المهارة.

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

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

سيجد المبرمجون الذين يستخدمون COM و.NET Framework الكثير هنا معلومات مفيدةمما يسهل دراسة مبادئ مكتبات الارتباط الديناميكي (DLL) ونماذج الخيوط وكيفية استخدامها والواجهات والمزامنة.

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

الافتراض الوحيد المضمن في كل ما سبق هو الافتراض بأن القراء لديهم خبرة في برمجة لغة C.

التغييرات في الطبعة الثالثة

إلى جانب التحديث وإعادة التنظيم الكبيرين من الإصدارين الأولين، تضيف الطبعة الثالثة كمية كبيرة من المواد الجديدة. يهدف هذا المنشور إلى حل المشاكل التالية:

قم بتغطية الميزات الجديدة المقدمة في أنظمة التشغيل Windows XP، وWindows 2000، وWindows Server 2003، وفكر في الترحيل إلى النظام الأساسي Win64.

استبعاد المواد التي تأخذ في الاعتبار تفاصيل أنظمة التشغيل Windows 95 وWindows 98 وWindows ME (عائلة "Windows 9x") باعتبارها قديمة، منذ أن تم توفيرها حاليًا الأنظمة الشخصيةتم تثبيت نظام التشغيل Windows XP، وقد فقدت القيود المتأصلة في نظام التشغيل Windows 9x أهميتها بالفعل. في البرامج النموذجية، دون أي تحفظات، يتم استخدام الأدوات المضمنة فقط في البرنامج الحالي إصدارات ويندوز، على الرغم من أن هذا سيؤدي إلى عدم تشغيل بعض البرامج على نظام التشغيل Windows 9x.

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

التأكيد على التأثير المتزايد لنظامي التشغيل Windows 2000 وWindows Server 2003 وميزاتهما الجديدة على إمكانيات تطبيقات الخادم عالية الأداء والقابلة للتطوير ومتعددة الخيوط.

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

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

كيف يتم تنظيم هذا الكتاب؟

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

في كل فصل، وبعد مناقشة موجزة لوظائف محددة، مثل إدارة العمليات أو عرض الملفات، تتم مناقشة أهم ميزات Windows ذات الصلة وكيفية ارتباطها ببعضها البعض بالتفصيل. العرض مصحوب بأمثلة توضيحية. يتم تضمين الأجزاء الأكثر أهمية فقط من قوائم البرامج في النص الرئيسي؛ النصوص الكاملة للبرامج، بالإضافة إلى الملفات المضمنة الضرورية والوظائف المساعدة والتعليمات البرمجية الأخرى مذكورة في الملحق أ أو متاحة على موقع الكتاب على الويب (http://www.awprofessional.com/titles/0321256190). في جميع الحالات التي تكون فيها الميزات مدعومة فقط من خلال الإصدارات الحالية من Windows (XP و2000 وServer 2003) وغير مدعومة من قبل الإصدارات السابقة، مثل Windows 9x وWindows NT، والتي لا تتضمن العديد من الميزات المحسنة، يتم تقديم إخلاء مسؤولية منفصل صنع. يقدم كل فصل قائمة بالقراءات الإضافية الموصى بها ويقدم العديد من التمارين. تركز العديد من التمارين على القضايا المهمة والتي تحظى ببعض الاهتمام ولكن لم يتم تناولها في النص الرئيسي، بينما تجبر التمارين الأخرى القارئ على التعمق في مواضيع ذات طبيعة أكثر تعقيدًا أو تخصصًا.

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

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

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

يتناول الفصل الخامس إدارة الذاكرة في Windows ويوضح كيفية استخدام تعيين الملفات ليس فقط لتبسيط البرمجة، ولكن أيضًا لتحسين أداء البرنامج. يناقش هذا الفصل أيضًا تنظيم مكتبات الارتباط الحيوي (DLL).

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

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

يغطي الفصلان 11 و12 الاتصالات بين العمليات والخيوط وبرمجة الشبكات. يركز الفصل 11 على الميزات التي تشكل جزءًا من Windows، وهي الأنابيب المجهولة والأنابيب المسماة و صناديق البريد. يناقش الفصل 12 مآخذ توصيل Windows، التي توفر القدرة على الاتصال بأنظمة خارج Windows. عائلة ويندوز، من خلال البروتوكولات القياسية، وخاصةً TCP/IP. و رغم ذلك واجهة ويندوزلا تعد المقابس جزءًا من Windows API بالمعنى الدقيق للكلمة؛ فهي قادرة على توفير الاتصال والتفاعل عبر الشبكات والإنترنت، لذا فإن نطاق هذا الفصل يتوافق مع بقية الكتاب. باستخدام مثال نظام خادم العميل متعدد الخيوط، نوضح كيف يمكن توفير الاتصال بين العمليات جنبًا إلى جنب مع الخيوط.

ويبين الفصل 13 كيف صورة ويندوزيسمح لك بتحويل تطبيقات الخادم مثل تلك التي تم إنشاؤها في الفصلين 11 و12 إلى خدمات ويندوز(خدمات Windows)، والتي يمكن إدارتها كخوادم خلفية. يتطلب تحويل الخادم إلى خدمة إجراء تغييرات طفيفة فقط على البرنامج.

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

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

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

يتم استكمال المادة الرئيسية للكتاب بثلاثة ملاحق. يحتوي الملحق (أ) على وصف للبرامج المتاحة على موقع الكتاب الإلكتروني وتوصيات لاستخدامها. يحتوي الملحق ب على عدة جداول تقارن ميزات Windows مع تلك التي يوفرها UNIX ومكتبة C القياسية، ويقارن الملحق C أداء التطبيقات البديلة لبعض الأمثلة الواردة في النص الرئيسي، مما يسمح للقارئ بصياغة فهمه الخاص للنسبية. مزايا وعيوب أدوات Windows، الأساسية والمتقدمة، والأدوات التي توفرها مكتبة C.

التعيين إلى UNIX ومكتبة C

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

يجب أن توفر الأمثلة أمثلة على الاستخدامات الشائعة والأكثر شيوعًا والمفيدة عمليًا لميزات Windows.

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

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

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

تقوم العديد من الأمثلة الواردة في الفصول القليلة الأولى بتطبيق أوامر UNIX مثل ls وtouch وchmod وsort، وبالتالي تقديم ميزات Windows في سياق سيكون مألوفًا لبعض القراء أثناء إنشاء مجموعة مفيدة من الوظائف المساعدة. بالإضافة إلى الحضور خيارات مختلفةتعمل تطبيقات نفس الأمر على تسهيل تقييم فوائد الأداء التي تم تحقيقها باستخدام تحسينات Windows. وتظهر نتائج الاختبار المقابلة في الملحق ب.

تتميز الأمثلة الواردة في بداية الكتاب، كقاعدة عامة، بقصر مدة البرامج، ولكن عندما تصبح المادة أكثر تعقيدًا في الفصول اللاحقة، فإن حجم رمز البرنامج التوضيحي، في الحالات الضرورية، يزيد بشكل كبير.

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

تم تصحيح جميع الأمثلة واختبارها في أنظمة التشغيل Windows XP وWindows 2000 وWindows Server 2003 - عند الضرورة، تم إجراء الاختبار ضمن أنظمة التشغيل Windows 9x وWindows NT. وعلى الرغم من أن الأنظمة ذات المعالج الواحد تعتمد على معالجات إنتلتم اختبار معظم البرامج أيضًا على أنظمة متعددة المعالجات. عند اختبار التطبيقات مع بنية خادم العميلتم استخدام العديد من العملاء الذين يتفاعلون مع الخادم في وقت واحد. ومع ذلك، لا يمكن للمرء أبدًا أن يدعي على وجه اليقين أن البرامج صحيحة أو كاملة وأنها مناسبة لأي غرض معين. بالطبع، حتى أبسط الأمثلة يمكن أن تحتوي على عيوب، وفي ظل ظروف معينة، لا تعمل على الإطلاق - وهذا هو مصير أي برنامج تقريبًا. لذلك، سيكون المؤلف ممتنا بصدق لكل من يرسل رسائل حول أي عيوب موجودة في البرامج، وحتى أفضل - حول الأخطاء.

المواقع المخصصة لهذا الكتاب

يوجد على موقع الكتاب (http://www.awprofessional.com/titles/0321256190) ملف قابل للتحميل يحتوي على جميع أكواد البرنامج والمشاريع لجميع الأمثلة الواردة في الكتاب، وحلول عدد من التمارين، تطبيقات بديلة لبعض الأمثلة والتعليمات وكذلك نتائج قياس الأداء. يتم تحديث هذه المعلومات بشكل دوري حسب الضرورة لتضمين مواد جديدة وإجراء التصحيحات اللازمة.

على موقع الويب الخاص بي (http://www.world.std.com/~jmhart/windows.htm) ستجد قائمة بالأخطاء الموجودة في الكتاب، بالإضافة إلى أمثلة إضافية ورسائل من القراء وتفسيرات إضافية ، من بين أشياء أخرى كثيرة. تتضمن أيضًا شرائح PowerPoint التي يمكن استخدامها لأغراض تعليمية غير تجارية. لقد تم بالفعل استخدام هذه الشرائح من قبل الطلاب في العديد من الدورات المهنية، ولكنها أيضًا مناسبة تمامًا للاستخدام في الكليات.

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

شكر وتقدير

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

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

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

كان الموظفون في Addison-Wesley Professional محترفين للغاية وذوي معرفة كبيرة لدرجة أنه كان من دواعي سروري العمل معهم. عملت ستيفاني نقيب، المحررة، وكارين جيتمان، رئيسة التحرير، في المشروع منذ البداية، وكانا يدفعانني عند الضرورة، ويزيلان أي تشتيت، ويتأكدان من أنني لن انحرف ولو قليلاً عن جدول العمل. قدم إيبوني هايت، مساعد المحرر، التوجيه العام طوال العملية، وجعل فريق الإنتاج المكون من جون فولر وباتريك كاش بيترسون، منسق الإنتاج، الأمر يبدو وكأنه لا يمكن التعامل مع عملية الإنتاج دون أي تعقيدات مرتبطة بها.

هذا الكتاب مخصص لحبيبنا بوب وإليزابيث.

جونسون (جون) م. هارت (جونسون (جون) م. هارت) [البريد الإلكتروني محمي]أغسطس 2004.

من الناشر

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

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

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

إحداثياتنا:

بريد إلكتروني: [البريد الإلكتروني محمي]

شبكة الاتصالات العالمية: http://www.williamspublishing.com

معلومات للرسائل من: روسيا: 115419، موسكو، ص.ب 783 أوكرانيا: 03150، كييف، ص.ب 152


جونسون م. هارت برمجة النظامالخامس بيئة ويندوزالطبعة الثالثة

مقدمة

يصف هذا الكتاب تطوير التطبيقات باستخدام واجهة برمجة التطبيقات (API) لأنظمة تشغيل Microsoft Windows، مع التركيز على خدمات النظام الأساسية، بما في ذلك نظام الملفات، وإدارة العمليات والخيوط، والاتصال بين العمليات، وبرمجة الشبكات، والمزامنة. لا يتم تناول واجهات المستخدم والمكونات الداخلية لـ Windows وبرامج تشغيل الإدخال/الإخراج في هذا الكتاب، على الرغم من أن هذه المواضيع لها نفس القدر من الأهمية ومثيرة للاهتمام في حد ذاتها. وكانت الأمثلة في الغالب مبنية على سيناريوهات واقعية، وبالتالي يمكن أن يكون الكثير منها بمثابة أساس لبناء تطبيقات الحياة الواقعية.

يتم دعم Win32/Win64 API، أو Windows API بشكل عام، من قبل عائلة Microsoft المكونة من أنظمة تشغيل 32 و64 بت، والتي تتضمن حاليًا Windows XP وWindows 2000 وWindows Server 2003. ومن بين الأعضاء الأوائل في هذه العائلة Windows NT أنظمة التشغيل، Windows Me، Windows 98 وWindows 95؛ تعتبر هذه الأنظمة الآن قديمة، ولكن العديد من أمثلة البرامج الواردة في الكتاب يمكن تشغيلها تحت سيطرتها. تتم مناقشة الانتقال من النظام الأساسي Win32 إلى النظام الأساسي Win64 المتطور حسب الضرورة. Win64، المدعوم كواجهة 64 بت في بعض إصدارات Windows Server 2003 وWindows XP، مطابق تقريبًا لـ Win32.

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

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

تقضي العديد من الكتب الموجودة على Windows الكثير من الوقت في شرح ماهية العمليات والذاكرة الافتراضية والاتصال بين العمليات والمجدول الوقائي، لكنها لا توضح كيفية استخدام هذه الأشياء في مواقف الحياة الواقعية. المبرمجون الذين لديهم خبرة في العمل مع UNIX وLinux وIBM MVS وOpen VMS وبعض أنظمة التشغيل الأخرى على دراية بهذه المفاهيم، وهم مهتمون فقط بالانتقال إلى تعلم كيفية تنفيذ هذه الميزات في Windows في أسرع وقت ممكن. بالإضافة إلى ذلك، تركز معظم كتب Windows بشكل كبير على تقنيات البرمجة المعتمدة على واجهة المستخدم. من أجل التركيز فقط على أهم الإمكانيات الأساسية التي يوفرها النظام، لا يتطرق هذا الكتاب إلى موضوع واجهة المستخدم، ونقتصر على مناقشة إدخال/إخراج أحرف وحدة التحكم البسيطة فقط.

وفقًا لوجهة النظر المعتمدة في هذا الكتاب، فإن Windows هو مجرد واجهة برمجة تطبيقات لنظام التشغيل توفر مجموعة من الأدوات المفهومة تمامًا. يشعر العديد من المبرمجين، بغض النظر عن مستوى خبرتهم، بالحاجة إلى تسريع تعلمهم لنظام Windows، وبدون المعرفة بنظام Windows، لا يمكن التفكير في مناقشة موضوعات مثل Component Object Model (COM) الذي طورته Microsoft. في بعض النواحي، تتفوق أنظمة Windows على الأنظمة الأخرى، وفي حالات أخرى، تتخلف عن الركب أو تكون على حالها تقريبًا. الهدف من هذا الكتاب هو توضيح كيفية استخدام هذه القدرات على أفضل وجه في مواقف العالم الحقيقي لتطوير تطبيقات مفيدة وعالية الجودة وعالية الأداء.

جونسون م. هارت

برمجة النظام في بيئة ويندوز

الطبعة الثالثة

مقدمة

يصف هذا الكتاب تطوير التطبيقات باستخدام واجهة برمجة التطبيقات (API) لأنظمة تشغيل Microsoft Windows، مع التركيز على خدمات النظام الأساسية، بما في ذلك نظام الملفات، وإدارة العمليات والخيوط، والاتصال بين العمليات، وبرمجة الشبكات، والمزامنة. لا يتم تناول واجهات المستخدم والمكونات الداخلية لـ Windows وبرامج تشغيل الإدخال/الإخراج في هذا الكتاب، على الرغم من أن هذه المواضيع لها نفس القدر من الأهمية ومثيرة للاهتمام في حد ذاتها. وكانت الأمثلة في الغالب مبنية على سيناريوهات واقعية، وبالتالي يمكن أن يكون الكثير منها بمثابة أساس لبناء تطبيقات الحياة الواقعية.

يتم دعم Win32/Win64 API، أو Windows API بشكل عام، من قبل عائلة Microsoft المكونة من أنظمة تشغيل 32 و64 بت، والتي تتضمن حاليًا Windows XP وWindows 2000 وWindows Server 2003. ومن بين الأعضاء الأوائل في هذه العائلة Windows NT أنظمة التشغيل، Windows Me، Windows 98 وWindows 95؛ تعتبر هذه الأنظمة الآن قديمة، ولكن العديد من أمثلة البرامج الواردة في الكتاب يمكن تشغيلها تحت سيطرتها. تتم مناقشة الانتقال من النظام الأساسي Win32 إلى النظام الأساسي Win64 المتطور حسب الضرورة. Win64، المدعوم كواجهة 64 بت في بعض إصدارات Windows Server 2003 وWindows XP، مطابق تقريبًا لـ Win32.

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

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

تقضي العديد من الكتب الموجودة على Windows الكثير من الوقت في شرح ماهية العمليات والذاكرة الافتراضية والاتصال بين العمليات والمجدول الوقائي، لكنها لا توضح كيفية استخدام هذه الأشياء في مواقف الحياة الواقعية. المبرمجون الذين لديهم خبرة في العمل مع UNIX وLinux وIBM MVS وOpen VMS وبعض أنظمة التشغيل الأخرى على دراية بهذه المفاهيم، وهم مهتمون فقط بالانتقال إلى تعلم كيفية تنفيذ هذه الميزات في Windows في أسرع وقت ممكن. بالإضافة إلى ذلك، تركز معظم كتب Windows بشكل كبير على تقنيات البرمجة المعتمدة على واجهة المستخدم. من أجل التركيز فقط على أهم الإمكانيات الأساسية التي يوفرها النظام، لا يتطرق هذا الكتاب إلى موضوع واجهة المستخدم، ونقتصر على مناقشة إدخال/إخراج أحرف وحدة التحكم البسيطة فقط.

وفقًا لوجهة النظر المعتمدة في هذا الكتاب، فإن Windows هو مجرد واجهة برمجة تطبيقات لنظام التشغيل توفر مجموعة من الأدوات المفهومة تمامًا. يشعر العديد من المبرمجين، بغض النظر عن مستوى خبرتهم، بالحاجة إلى تسريع تعلمهم لنظام Windows، وبدون المعرفة بنظام Windows، لا يمكن التفكير في مناقشة موضوعات مثل Component Object Model (COM) الذي طورته Microsoft. في بعض النواحي، تتفوق أنظمة Windows على الأنظمة الأخرى، وفي حالات أخرى، تتخلف عن الركب أو تكون على حالها تقريبًا. الهدف من هذا الكتاب هو توضيح كيفية استخدام هذه القدرات على أفضل وجه في مواقف العالم الحقيقي لتطوير تطبيقات مفيدة وعالية الجودة وعالية الأداء.

الجمهور المحتمل

أي شخص يريد أن يتعلم بسرعة كيفية تطوير التطبيقات، بغض النظر عن مستوى المهارة.

المبرمجون ومحترفو تطوير البرمجيات المكلفون بنقل التطبيقات الموجودة، خاصة تلك المكتوبة لنظام UNIX، إلى أي نظام أساسي يعمل بنظام Windows. يقارن الكتاب الميزات ونماذج البرمجة المرتبطة باستخدام مكتبة Windows وUNIX ومكتبة C القياسية، وتتم مناقشة كل وظيفة من وظائف UNIX الشائعة، بما في ذلك إدارة العمليات والمزامنة وأنظمة الملفات والاتصال بين العمليات، في مصطلحات Windows.

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

سيجد المبرمجون الذين يستخدمون COM و.NET Framework هنا الكثير من المعلومات المفيدة التي ستسهل دراسة مبادئ مكتبات الارتباط الديناميكي (DLLs) ونماذج الخيوط وكيفية استخدامها والواجهات والمزامنة.

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

الافتراض الوحيد المضمن في كل ما سبق هو الافتراض بأن القراء لديهم خبرة في برمجة لغة C.

التغييرات في الطبعة الثالثة

إلى جانب التحديث وإعادة التنظيم الكبيرين من الإصدارين الأولين، تضيف الطبعة الثالثة كمية كبيرة من المواد الجديدة. يهدف هذا المنشور إلى حل المشاكل التالية:

قم بتغطية الميزات الجديدة المقدمة في أنظمة التشغيل Windows XP، وWindows 2000، وWindows Server 2003، وفكر في الترحيل إلى النظام الأساسي Win64.

استبعاد المواد التي تأخذ في الاعتبار تفاصيل أنظمة التشغيل Windows 95 وWindows 98 وWindows ME (عائلة "Windows 9x") باعتبارها قديمة، نظرًا لأن نظام التشغيل Windows XP مثبت على الأنظمة الشخصية المتوفرة حاليًا، وقد فقدت القيود المتأصلة في نظام التشغيل Windows 9x مفعولها بالفعل ملاءمة. تستخدم البرامج النموذجية، دون أي تحفظات، الأدوات المضمنة فيها فقط الإصدارات الحالية Windows، على الرغم من أن هذا سيؤدي إلى عدم تشغيل بعض البرامج على Windows 9x.

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

التأكيد على التأثير المتزايد لنظامي التشغيل Windows 2000 وWindows Server 2003 وميزاتهما الجديدة على إمكانيات تطبيقات الخادم عالية الأداء والقابلة للتطوير ومتعددة الخيوط.

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