View Full Version : برنامه نویسی لینوکس ، قدم به قدم
pswin.pooya
شنبه 05 مرداد 1392, 11:39 صبح
در این تاپیک قصد آموزش برنامه نویسی لینوکس رو بصورت قدم به قدم برای مبتدیان دارم. امیدوارم که مفید باشه.
درباره برنامه نویسی C/C++ (http://barnamenevis.org/showthread.php?410930-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-%D8%8C-%D9%82%D8%AF%D9%85-%D8%A8%D9%87-%D9%82%D8%AF%D9%85&p=1832517&viewfull=1#post1832517)
ابزارها (http://barnamenevis.org/showthread.php?410930-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-%D8%8C-%D9%82%D8%AF%D9%85-%D8%A8%D9%87-%D9%82%D8%AF%D9%85&p=1833249&viewfull=1#post1833249)
کتابخانه ها (http://barnamenevis.org/showthread.php?410930-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-%D8%8C-%D9%82%D8%AF%D9%85-%D8%A8%D9%87-%D9%82%D8%AF%D9%85&p=1833270&viewfull=1#post1833270)
برنامه Hello World
(http://barnamenevis.org/showthread.php?410930-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-%D8%8C-%D9%82%D8%AF%D9%85-%D8%A8%D9%87-%D9%82%D8%AF%D9%85&p=1833400&viewfull=1#post1833400)
pswin.pooya
شنبه 05 مرداد 1392, 12:26 عصر
داخل لینوکس گزینه های زیادی برای برنامه نویسی وجود داره و دقیقا همه یا حتی اکثرا برنامه نویس ها از یک گزینه ثابت استفاده نمی کنن. از اونجا که برنامه نویسی ویندوز در اکثر موارد به کمک visual studio انجام میگیره و خصوصیت این نرم افزار پنهان کردن جزپیات برنامه نویسی هست لازمه که قبل از هرکاری یکسری تعریف ها رو مطرح کنیم.
کامپایلر: نرم افزاری است که برنامه سطح بالا رو به کد میانی و یا کد اسمبلی تبدیل می کند.
اسمبلر: وظیفه آن تولید کد اسمبلی به کد ماشین (0و 1) که به آن bytecode هم گفته می شود است. (گاهی اوقات اسمبلر و کامپایلر بصورت یکپارچه هستند )
لینکر: بعد از انجام تبدیل کد توسط کامپایلر و اسمبلر برنامه لینکر کدهای تولید شده را کنار هم قرار داده و برنامه نهایی رو تولید می کند. در حقیقت کامپایلر کدها رو بصورت قسمت به قسمت تولید می کند ( مثلا کد هر تابع را جداگانه می سازد ) و لینکر وظیف کنارهم گذاشتن آنها و تولید برنامه نهایی را که داری قالب خاصی است را به عهده دارد.
ide: به آن محیط یکپارچه توسعه گفته می شود. معمولترین وظیفه ide یک ادیتور متن و یا یک ادیتور گرافیکی برای gui است و وظیفه بعدی آن تولید کدهای لازم برای کار با کامپایلر و لینکر است.
debuger: این برنامه با توجه به اطلاعات داده شده به آن که معمولا جدول نشانه ها است. اقدام به اجرای کد به صورت قدم به قدم و خواندن محتویات متغییرها و ... از حافظه برنامه می نماید.
خب محیط ویژوال استادیو در حقیقت یک ide هست که در پشت صحنه از کامپایرهای خود (همانند کامپایلر c و یا C#) استفاده می کند و بعد از پایان کار لینکر رو فراخوانی می کند.
مراحل کامپایل برنامه C
1. حذف preprocessor ها : اولین مرحله کامپایل که پیش پردازشهایی مثل #define حذف می گردند و در کد نهایی اعمال می شوند.
۲. کامپایل: شامل مراحل اسکنر و پارسر و بهینه سازی و ... میشه. البته توی این مرحله کد اسمبلی تولید نمیشه.
۳. تولید کد اسمبلی
۴. لینک کردن فایلهای آبجت و تولید کد نهایی
چند نکته در مورد برنامه های C/C++:
برنامه های سی و سی پلاس پلاس از سه جزء اصلی زیر تشکیل شدن:
۱. سینتکس
۲. سی در زمان اجرا CRT
۳. کتابخانه استاندارد.
سینتکس: همون قواعد سی و یا سی پلاس پلاس هست که در همه کتابها بهش اشاره شده. مثل if و for و...
CRT: شامل یکسری از توابع و کدها میشه که مواردی همانند نقطه ورود برنامه ( نقطه ای که تابع main رو صدا میزنه) و یا نحوه تخصیص هیپ یا همون عملگرهای new و delete و ... رو مشخص میکنه.
کتابخانه استاندارد: ازش با نام STL یاد میشه و فضای کار std بهش اختصاص داده شده. شامل یکسری از کتابخانه های استاندارد است که در هر ویرایش زبان C++ همراه با قواعد ویژگی های این کتابخانه هم مشخص میشه. برنامه های C++ بدون نیاز به این کتابخانه هم می تونن کار کنن.
برنامه های C برعکس اشتباهات زیادی که در کتابهای برنامه نویسی میشه نیازی به تابع main ندارند. در حقیقت شما می تونید برنامه ای بنویسید که تابعی به نام main نداشته باشه. و این CRT هست که مشخص میکنه چه تابعی باید برای اولین بار صدا زده شه. شما با تغییر یا بازنویسی اون می تونید تابع main با نام دلخواه خودتون رو داشته باشید.
به نقطه ورود برنامه که تابع main رو صدا میزنه و مقدمات اجرای برنامه رو فراهم میکنه entry point (نقطه ورود) گفته میشه.
new و delete در C++ کلمه کلیدی نیستند بلکه یک نوع عملگر هستند. باید توجه کنید که ماهیت کلمه کلیدی رو نمیشه تغییر داد ولی عملگرها رو میشه بازنویسی کرد. شما می تونید new و delete خودتون رو داشته باشید
pswin.pooya
یک شنبه 06 مرداد 1392, 10:33 صبح
همنطور که قبلا هم اشاره کرده بودم ابزارهای زیادی داخل لینوکس برای برنامه نویسها وجود دارن اصطلاحا میگن لینوکس بهشت برنامه نویسها است. برخی از این ابزارها عبارتند از
کامپایلرها زبان سی:
GNU Compiler Collection )GCC): معمولا برنامه نویسهای لینوکس از این کامپایلرها استفاده میکن. که شامل کامپایلرهای C، C++، Java و ... میشه.
کامپایلرهای اینتل: کامپایلرهای C و C++ اینتل پولی هم هستند.
open64: کامپایلرهای تحقیقات باز
اسمبلرها
AS: اسمبلر دیفالت لینوکس
gas
nasm: این اسمبلر از همون خانواده as است با این تفاوت که برای برنامه نویسهایی که قبلا با اسمبلرهایی مثل masm کار کردن و یا برنامه نویسی هایی که سینتکس اسمبلی as رو بلد نیستند مناسبتر از بقیه است.
لینکرها:
ld:معمولا همه از این لینکر استفاده میکنن
ادیتورهای محیط متنی:
vi: یکی از محبوترین ادیتورها هست که برای مبتدیهای لینوکس کار اصلا پیشنهاد نمیشه
vim
nano: این ادیتور برای مبتدی ها مناسبتر هست
ادیتورهای گرافیکی:
gedit: ادیتور دیفالت گنوم
emacs: حرفه ای ها عاشق این ادیتور هستند.
و ....
ideها:
eclipse: یه ide برای اکثر زبانهای برنامه نویسی
codeblocl: این ide برای زبان C++ هست
qt-creator: این ide برای qt طراحی شده منتها باهاش میشه کارهای دیگه هم کرد. این ide واقعا خوش دسته
بعدا با تکمیل شدن آموزش لیستی از نرم افزارهای حرفه ای تر و نحوه کار با اونها مثل objdump و ... رو هم قرار میدم
pswin.pooya
یک شنبه 06 مرداد 1392, 10:55 صبح
در لینوکس شما طیف وسیعی از کتابخونه ها و API ها رو دارید که می تونن سرعت برنامه نویسی شما رو بالا ببرند. در زیر لیست برخی از آنها آورده شده:
GUI:
QT
GTK
GTK+
wxWidgets
و ....
گرافیک:
OpenGL: استاندارد صنعتی گرافیک هست که برای کارهای دو و سه بعدی می تونه مورد استفاده قرار بگیره
X11: با توابع x11 هم میشه کارهای گرافیکی ابتدایی کرد.
صوت:
OpenAL: کتابخونهه صدای سه بعدی
:FMOD یکی از معروفترین کتابخونه های صدای سه بعدی و دو بعدی همراه با امکانات زیاد است
تصویر:
OpenIL: این کتابخونه برای بارگذاری (دیکد کردن) ، تغییر , و ذخیره تصاویر است.
ویدو:
FFMpeg
libavc
gstream
اسکریپت:
Lua
Phyton
Angle Script
GameMonkey
Ruby
و ...
موازی سازی:
OpenMP
محاسبات ناهمگن:
OpenCL
CUDA
پردازش تصویر
OpenCV
JIT : این کتابخونه ها برای ساخت کامپایلرهای Just in time استفاده میشن و یا موارد مشابه اون
libjit
gnu lighting
همه منظوره:
QT: یه چیزی معادل دات نت برای ویندوز منتها هم با سرعت بیشتر و هم انعطاف پذیری بهتر
boost: یه کتابخونه ناتیو برای همه چی. این کتابخونه انواع موارد برنامه نویسی مثل کانتاینرها و ... رو با کیفیت بسیار بالا پیاده سازی کرده. حتما تستش بکنید
POSIX: این API استاندارد برنامه نویسی سیستم های یونیکی منجمله لینوکس و مک است.
SDL: یه کتابخونه همه منظوره دیگه
دوستان این لیست کتابخونه ها رو هم به مرور زمان تکمیلش میکنم. فعلا همین ها به ذهنم می اومد
pswin.pooya
یک شنبه 06 مرداد 1392, 13:10 عصر
به عنوان اولین مثال برنامه معروف Hello World را با زبانهای برنامه نویسی C و C++ در لینوکس خواهیم نوشت:
متن برنامه در زبان C:
#include <stdio.h>
int main()
{
printf("Hello world!\n");
return 0;
}
نکته: برنامه های لینوکس حتما باید یک مقدار را بر گرداندد این مقدار بعد توسط برنامه های دیگر برای بررسی صحت عملکرد برنامه استفاده می شود. بنابراین شما نمی توانید تابع main را به صورت void تعریف کنید.
نکته۲: زمانی که برنامه با موفقیت کار خود را پایان دهد مقدار صفر را بازگشت می دهد. و در غیر این صورت مقداری به غیر از سفر که بیانگر شماره خطا است را باز می گرداند.
کامپایل برنامه:
برای کامپایل برنامه های C ار کامپایلر GNU C که gcc نیز نامیده می شود استفاده می کنیم:
gcc hello.c -o hello.o
نکته: پسوند فایل باید حتما c باشد.
نکته ۲: سوپیچ -o نام برنامه نهایی را مشخص می کند.
نکته ۳: پسوند .o بیانگر پسوند اجرایی همانند .exe در سیستم عامل ویندوز نیست. در حقیقت قابل اجرا بودن برنامه در لینوکس یکی از خاصیتهای فایل است.
نکته ۴: در صورتی که از سوپیچ -o استفاده نکنید برنامه با نام a.out ایجاد می گردد.
حال برنامه را به صورت زیر اجرا می کنیم:
./hello.o
توجه کنید که در لینوکس معمولا برنامه ها در شاخه های زیر قرار دارند:
/bin
/sbin
/usr/bin
زمانی که شما نام برنامه ای را تایپ می کنید. سیستم عامل بصورت پیش فرض در دایرکتورهایی که در متغییر محیطی PATH ذخیره شده اند به دنبال برنامه می گردد و اگر آن را در آن دایرکتوری ها یافت نکند پیغام خطا را نمایش می دهد. برای مشاهده محتویات این متغییر محیطی می توانید دستور زیر را در ترمینال وارد کنید:
echo $PATH
حال اگر بخواهید برنامه ای را اجرا کنید که در یکی از این دایرکتوری ها نباشد باید مسیر کامل و یا نسبی آن را تایپ کنید. به عنوان مثال در اینجا ما مسیر نسبی برنامه hello.o را وارد کردیم (./)
کامپایل برنامه های C++:
کد برنامه:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
return 0;
}
برای کامپایل برنامه های C++ از کامپایلر g++ استفاده می کنیم. این کامپایلر معمولا به صورت پیش فرض نصب نیست. می توانید از دستور زیر در توزیع های مبتنی بر دبین همانند اوبونتو برای نصب آن استفاده کنید:
sudo apt-get install g++
بعد از نصب g++ فرمان زیر را برای کامپایل برنامه وارد کنید:
g++ hello.cpp -o hello.o
حال می توانید این برنامه را همانند برنامه قبل اجرا کنید:
./hello.o
نکته: پسوند فایلهای C++ باید حتما cpp باشد.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.