کتاب System Programming in Linux: A Hands-On Introduction (برنامهنویسی سیستمی در لینوکس: یک مقدمه عملی) یک راهنمای کاربردی برای آشنایی با مفاهیم پایه و پیشرفته برنامهنویسی سیستمی در سیستمعامل لینوکس است. این کتاب با رویکردی عملی و پروژهمحور، به توسعهدهندگان کمک میکند تا با تعامل مستقیم با هسته سیستمعامل، مفاهیمی مانند فراخوانیهای سیستمی (system calls)، مدیریت فایلها، پردازشها، نخها (threads)، سیگنالها، و ارتباط بین فرایندی (IPC) را بهصورت عمیق بیاموزند.
در ادامه مقدمهای از کتاب System Programming in Linux را از زبان نویسنده شرح خواهیم داد.
مقدمهای بر کتاب System Programming in Linux:
من این کتاب را طراحی کردم تا به شما کمک کنم نوشتن برنامههای سیستمی و کاربردی را در لینوکس بیاموزید. بخش عمدهای از آن برای سایر سیستمهای یونیکس نیز کاربرد دارد.
چه کاربر یونیکس/لینوکس باشید یا دانشجوی علوم کامپیوتر که میخواهد عمیقتر به رابط برنامهنویسی یونیکس/لینوکس بپردازد، یا شخص دیگری به شما گفته است که از یادگیری بیشتر در مورد آن بهرهمند خواهید شد، یا فقط کنجکاو هستید و آماده کاوش در مسیری جدید، کتاب System Programming in Linux شما را به آن هدف راهنمایی خواهد کرد.
مهم نیست چگونه به اینجا رسیدهاید، خوشحالم که توجه شما را جلب کردهام و امیدوارم در طول این سفر، علاقه شما را حفظ کنم.
در کتاب System Programming in Linux چه چیزی یاد خواهید گرفت؟
برخلاف بسیاری از کتابهای دیگر در این زمینه، این کتاب نیازی به تجربه برنامهنویسی قبلی در یونیکس یا لینوکس به طور خاص ندارد و نیازی نیست که از قبل یک برنامهنویس متخصص باشید. فرض بر این است که شما اطلاعات کمی در مورد رابط برنامهنویسی لینوکس دارید، و دانش و توانایی شما را برای یادگیری بیشتر، گام به گام، افزایش میدهد.
اگر اکنون کتاب System Programming in Linux را ورق بزنید و مطالبی را در فصلهای بعدی ببینید که درک آنها بسیار پیشرفته به نظر میرسد، نگران نباشید. تا زمانی که به آنجا برسیم، باید به راحتی همه آن را درک کنید. برای جزئیات دقیق در مورد آنچه برای بهرهمندی از این کتاب باید بدانید، به “برای درک این کتاب چه باید بدانید؟” در صفحه xxxii مراجعه کنید.
من هنگام طراحی و نوشتن کتاب System Programming in Linux چندین هدف مختلف داشتم که نشاندهنده روشهای مختلفی است که ما با یونیکس/لینوکس تعامل داریم:
- آموزش نحوه نوشتن برنامه در و برای سیستم عامل یونیکس، و به ویژه لینوکس
- بهبود توانایی شما برای کارآمدی در محیط یونیکس/لینوکس
- آموزش نحوه طراحی و ساختار سیستم عامل یونیکس تا درک عمیقتری از آنچه “زیر کاپوت” اتفاق میافتد داشته باشید.
- ایجاد قدردانی از شگفتی و جادوی یونیکس تا بخواهید بیشتر بیاموزید
اینها اهداف بسیار سنگینی هستند و ممکن است به نظر برسد که دستیابی به آنها در یک کتاب واحد بیش از حد است. برای این کار، کتاب System Programming in Linux نه جامع است و نه کامل. این یک کتاب مرجع در مورد همه چیز یونیکس نیست. هر جنبهای از برنامهنویسی در محیط یونیکس را پوشش نمیدهد و به هر موضوعی که پوشش میدهد عمیقاً نمیپردازد.
در عوض، این یک آموزش عملی است و آنچه را که من معتقدم برای ارائه یک زمینه محکم و نشان دادن چگونگی یادگیری بیشتر در مورد هر موضوع به تنهایی کافی است، پوشش میدهد. همچنین مفهومی است و نه تنها به شما نشان میدهد که ویژگیهای مختلف چه کاری انجام میدهند و چگونه از آنها استفاده کنید، بلکه نحوه عملکرد آنها را نیز نشان میدهد تا درک کنید چرا باید کاری را انجام دهید که انجام میدهید و چرا وقتی مشکلی پیش میآید، چیزی آنطور که انتظار داشتید کار نمیکند.
سازماندهی فصول کتاب System Programming in Linux
این کتاب 19 فصل دارد که بر روی یکدیگر بنا شدهاند. من این کتاب را طوری نوشتم که انگار در یک کلاس درس آموزش میدهم و شما با من آنجا هستید، و ما سفری را آغاز کردهایم که در آن این مطالب را با هم یاد میگیریم. انتظار ندارم خوانندهای که از فصل 7 کتاب System Programming in Linux شروع میکند، آن را درک کند، همانطور که انتظار ندارم دانشجویی که شش کلاس اول یک دوره را از دست داده است، چیز زیادی از کلاس هفتم بفهمد.
فصل 1: مفاهیم اصلی
توضیح میدهد که برنامهنویسی سیستمی چیست و چه تفاوتی با انواع دیگر برنامهنویسی دارد. مفاهیم و مؤلفههای اساسی سیستم عامل یونیکس، مانند کاربران و گروهها، فایلها و دایرکتوریها، فرآیندها و غیره را معرفی میکند و صفحات man (دفترچه راهنمای یونیکس) و نحوه استفاده از آنها را توضیح میدهد. همچنین به تاریخچه یونیکس و استانداردهای کلیدی میپردازد.
فصل 2: مبانی برنامهنویسی سیستمی
مفاهیم مرتبط با برنامهنویسی در محیط یونیکس و کار با رابط برنامهنویسی کاربردی هسته (API) را معرفی میکند. کتابخانههای شیء و تفاوت بین کتابخانههای ایستا و اشتراکی، فراخوانیهای سیستمی، مدیریت خطا، قابلیت حمل و ماکروهای تست ویژگی، محدودیتهای سیستم، و بینالمللیسازی برنامهها را پوشش میدهد. همچنین نحوه دسترسی برنامهها به رشتههای محیط و آرگومانهای خط فرمان آنها، و پردازش گزینههای خط فرمان را پوشش میدهد.
فصل 3: زمان، تاریخها و محلیسازیها
روش یادگیری برنامهنویسی سیستمی را که بقیه کتاب System Programming in Linux از آن پیروی میکند، ارائه میدهد و نحوه سازماندهی مخزن کد منبع که شامل تمام برنامههای مثال است را توضیح میدهد. این روش را برای توسعه برنامههایی که با تاریخ و زمان در یونیکس کار میکنند، به کار میبرد و روشهای اساسی بینالمللیسازی برنامهها را معرفی میکند.
فصل 4: مفاهیم اساسی ورودی/خروجی فایل
مفاهیم اصلی فایلها و ورودی/خروجی فایل در یونیکس را معرفی میکند، از جمله ورودی/خروجی جهانی، اتصالات فایل باز، توصیفگرهای فایل، و بخشهای API هسته مربوط به ورودی/خروجی. همچنین به مجوزهای فایل، انواع شناسههای کاربری، و قابلیت setuid میپردازد. یک فرمان کپی سادهسازی شده را توسعه میدهد و مسائل مربوط به عملکرد و بافرینگ را بررسی میکند.
فصل 5: ورودی/خروجی فایل و حسابداری ورود
اشارهگر فایل، عملیات جستجو، و چند روش پیشرفتهتر ورودی/خروجی را معرفی میکند. فایلهای داده سیستمی مربوط به کاربران و ورودها را معرفی میکند و نسخههای ساده شدهای از دستورات lastlog و last را توسعه میدهد.
فصل 6: مروری بر سیستمهای فایل و فایلها
به ساختار دیسکها، پارتیشنهای دیسک، سیستمهای فایل دیسک و جزئیات داخلی آنها میپردازد. بخشهایی از API هسته برای دسترسی به ویژگیهای سیستم فایل، ویژگیهای فایل و موارد دیگر را معرفی میکند، و همچنین سیستم فایل مجازی لینوکس و نحوه عملکرد آن را معرفی میکند. سپس نسخههای سادهای از دستورات stat و statfs را توسعه میدهد.
فصل 7: سلسلهمراتب دایرکتوری
ساختار دایرکتوریها و سلسلهمراتب دایرکتوری را توضیح میدهد. بخشهای API هسته و کتابخانههای استاندارد برای پردازش دایرکتوریها و سلسلهمراتب دایرکتوری، از جمله روشهای پیمایش سلسلهمراتب را بررسی میکند. در اینجا، ما دستورات ساده ls، pwd و du را توسعه میدهیم.
فصل 8: مقدمهای بر سیگنالها
مفاهیم اصلی سیگنالها و نحوه استفاده از آنها در سیستمهای یونیکس را پوشش میدهد. بخشهای API هسته مربوط به ارسال سیگنالها، مدیریت سیگنال، ثبت سیگنال و مسدود کردن سیگنال را معرفی میکند. همچنین به طراحی کنترلکنندههای سیگنال و مفهوم ایمنی سیگنال ناهمگام میپردازد.
فصل 9: تایمرها و توابع خواب
عناصر زمانبندی برای برنامهها را معرفی میکند و مفاهیم اساسی مربوط به زمانبندی، مانند ساعتها، تایمرهای فواصل سختافزاری و غیره را توضیح میدهد. چندین تابع خواب مختلف و تایمرهای فواصل نرمافزاری را معرفی میکند و همچنین چند برنامه را توسعه میدهد که مانند مانیتورهای سیستمی عمل میکنند.
فصل 10: مبانی فرآیندها
مبانی فرآیندها را معرفی میکند: آنها چه هستند، چگونه سازماندهی میشوند، و چگونه توسط هسته به صورت داخلی مدیریت و نمایش داده میشوند. فرمت فایل Executable and Linking Format (ELF) و نحوه استفاده از آن برای ایجاد تصاویر فرآیند را معرفی میکند، و همچنین سیستم فایل مجازی proc را معرفی میکند. در اینجا ما یک دستور ps سادهسازی شده را توسعه میدهیم.
فصل 11: ایجاد و خاتمه فرآیند
بخشهای API هسته مربوط به ایجاد، خاتمه و مدیریت فرآیندها، از جمله فراخوانیها برای همگامسازی فرآیندهای والد و فرزند را معرفی میکند. یک برنامه پوسته (shell) سادهسازی شده را توسعه میدهد.
فصل 12: مقدمهای بر ارتباطات بین فرآیندی (IPC)
اولین از دو فصل اختصاص داده شده به ارتباطات بین فرآیندی (IPC). حافظه مشترک POSIX، سمافورها و صفوف پیام POSIX را پوشش میدهد. چند برنامه را توسعه میدهد که کاربرد این امکانات IPC را نشان میدهند.
فصل 13: پایپها و FIFOها
پایپهای بدون نام و پایپهای نامگذاری شده، که FIFO نیز نامیده میشوند، را معرفی میکند و به جزئیات معناشناسی باز کردن، خواندن، نوشتن و بستن پایپها و FIFOها میپردازد. یک سرور ساده مبتنی بر FIFO را توسعه میدهد.
فصل 14: برنامههای کلاینت-سرور و دیمونها
مفاهیم مربوط به توسعه برنامههای کلاینت-سرور، از جمله امکانات ورود به سیستم و تبدیل فرآیندها به دیمونها را پوشش میدهد. هم یک سرور تکرار شونده مشابه دستور calc و هم یک سرور همزمان را توسعه میدهد.
فصل 15: مقدمهای بر ریسهها (Threads)
اولین از دو فصل در مورد برنامههای چند ریسهای. اصول اولیه ریسه را پوشش میدهد، بخش زیادی از کتابخانه Pthreads مربوط به ایجاد و مدیریت ریسه را بررسی میکند، و یک سرور چند ریسهای را توسعه میدهد.
فصل 16: همگامسازی ریسهها
بخشهای API کتابخانه Pthreads مربوط به همگامسازی ریسهها، از جمله Mutexها، متغیرهای شرطی (Condition Variables)، موانع (Barriers) و قفلهای خواندن-نوشتن (Read-Write Locks) را پوشش میدهد.
فصل 17: روشهای جایگزین ورودی/خروجی (I/O)
مدلهای I/O فراتر از مدل استاندارد I/O مسدودکننده را بررسی میکند. به طور خاص، I/O غیرمسدودکننده و نظرسنجی (polling)، I/O سیگنالمحور، I/O ناهمگام POSIX، و I/O چندگانه با استفاده از فراخوانی سیستمی select() را پوشش میدهد.
فصل 18: ترمینالها و ورودی/خروجی ترمینال
ترمینالها و ورودی/خروجی ترمینال را پوشش میدهد، که با نیازهای ویژه برنامههای تعاملی آغاز میشود. ساختار نرمافزار درایور ترمینال و پشتیبانی از پیکربندی ترمینال در هسته را بررسی میکند، و پس از آن، روشهای پیکربندی ترمینال مانند رابطهای termios و ioctl را بررسی میکند. یک دستور stty ساده شده را توسعه میدهد.
فصل 19: برنامهنویسی تعاملی و کتابخانه ncurses
پیکربندی ترمینال برای برنامههای تعاملی، از جمله برنامهنویسی حالت غیرکانونیکال (noncanonical mode) را پوشش میدهد. API کتابخانه ncurses را معرفی میکند و چند برنامه بر اساس آن توسعه میدهد، که با یک نسخه ساده از دستور top به پایان میرسد.
ضمیمه الف: ایجاد کتابخانهها
نحوه ایجاد و مدیریت کتابخانههای ایستا و اشتراکی را نشان میدهد.
ضمیمه ب: یونیکد و UTF-8
یک آموزش کوتاه در مورد یونیکد و نمایش طول متغیر یونیکد که به عنوان UTF-8 شناخته میشود، ارائه میدهد.
ضمیمه ج: مشخصکنندههای قالب تاریخ و زمان
جدولی از مشخصکنندههای تاریخ و زمان، همراه با مثالهایی، که در قالببندی تاریخها و زمانها توسط توابع و ابزارهای سیستمی مختلف استفاده میشود، ارائه میدهد.
سرفصلهای کتاب System Programming in Linux:
- About the Author
- Brief Contents
- Contents in Detail
- Acknowledgments
- Preface
- Introduction
- Chapter 1: Core Concepts
- Chapter 2: Fundamentals of System Programming
- Chapter 3: Time, Dates, and Locales
- Chapter 4: Basic Concepts of File I/O
- Chapter 5: File I/O and Login Accounting
- Chapter 6: Overview of Filesystems and Files
- Chapter 7: The Directory Hierarchy
- Chapter 8: Introduction to Signals
- Chapter 9: Timers and Sleep Functions
- Chapter 10: Process Fundamentals
- Chapter 11: Process Creation and Termination
- Chapter 12: Introduction to Interprocess Communication
- Chapter 13: Pipes and FIFOs
- Chapter 14: Client-Server Applications and Daemons
- Chapter 15: Introduction to Threads
- Chapter 16: Thread Synchronization
- Chapter 17: Alternative Methods of I/O
- Chapter 18: Terminals and Terminal I/O
- Chapter 19: Interactive Programming and the ncurses Library
- Appendix A: Creating Libraries
- Appendix B: Unicode and UTF-8
- Appendix C: Date and Time Format Specifiers
- Bibliography
- Index
جهت دانلود کتاب System Programming in Linux میتوانید پس از پرداخت، دریافت کنید.
دیدگاهها
هیچ دیدگاهی برای این محصول نوشته نشده است.