PDA

View Full Version : سوال: توابع C



ahmadr
سه شنبه 19 شهریور 1387, 20:50 عصر
با سلام
چگونه مي توانيم پياده سازي توابع مورد استفاده در C مانند printf ، malloc و ... را ببينيم و با نحوه نوشتن اين توابع آشنا شويم؟

mafia5
سه شنبه 19 شهریور 1387, 23:08 عصر
فكر كنم بايد اسم تابع رو بنويسيد و د رحالتي كه موس يا همون اشاره گر زير اون هست كليد ctrl + F1 رو بزنيد

و در اونجا توضيحاتي داده كه بايد خودتون پيدا كنيد كد ها رو.

tritilium
چهارشنبه 20 شهریور 1387, 01:49 صبح
اگه اشتباه نكنم پياده سازيشو نمي شه ديد و پياده سازي ها هم بسته به كامپايلر فرق مي كنن ( مخصوصا كامپايلر هاي bc و tc و .. كه تجارين ) .ولي احتمالا كامپايلر منبع باز ي مثه gcc كد اين توابع رو دارن يه سر به gcc.gnu.org بزن

hoax3r
چهارشنبه 20 شهریور 1387, 11:08 صبح
در مورد کامپایلر های دیگه اطلاعایی ندارم ولی شما اگه Visual Stuido رو داشته باشه داخلش سورس این توابع موجوده.

برای نسخه 6 در این پوشه:


C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC


و 2005 در این پوشه:


C:\Program Files\Microsoft Visual Studio 8\VC\crt\src

Salar Ashgi
چهارشنبه 20 شهریور 1387, 11:38 صبح
سلام ، همانطور که گفتند اینکار تو VS امکان پذیره ، ولی تو کامپایلر های قدیمی تر مثل

توربو ، بورلند و ... فکر کنم نشه این کار رو انجام داد !!! ولی تو کامپایلر های سورس باز

(Open Source ) ، این کار امکان پذیره !!!!

موفق و پیروز باشید !!!!

توسعه نویس
چهارشنبه 20 شهریور 1387, 15:41 عصر
برای اینکار به لینک های زیر مراجعه کنید:

http://www.acm.uiuc.edu/webmonkeys/book/c_guide/

http://msdn.microsoft.com/en-us/library/25db87se.aspx

http://www.cs.wfu.edu/~torgerse/Kokua/More_SGI/007-0701-150/sgi_html/index.html (http://www.cs.wfu.edu/%7Etorgerse/Kokua/More_SGI/007-0701-150/sgi_html/index.html)

ahmadr
چهارشنبه 20 شهریور 1387, 17:52 عصر
باتشكر از دوستان
اما من هنوز نتونستم موفق بشم و مثلا پياده سازي تابع gethostbyaddr رو پيدا كنم و وقتي توي Visual Stuido و حتي gcc نگاه كردم در هدر winsock2.h پياده سازي رو نمايش نداد و فقط نحوه تعريف تابع را مشخص كرده

Nima_NF
چهارشنبه 20 شهریور 1387, 20:36 عصر
باتشكر از دوستان
اما من هنوز نتونستم موفق بشم و مثلا پياده سازي تابع gethostbyaddr رو پيدا كنم و وقتي توي Visual Stuido و حتي gcc نگاه كردم در هدر winsock2.h پياده سازي رو نمايش نداد و فقط نحوه تعريف تابع را مشخص كرده
توجه کنید که فقط سورس برخی از کتابخانه ها در دسترس می باشد نه تمامی آن ها، مانند بسیاری از کتابخانه های استاندارد ++C که مایکروسافت لیسانس و همین طور اجازه انتشار سورس آن را از شرکت هایی مثل dinkumware گرفته است (و یا حتی خودش پیاده سازی کرده است) و جهت سهولت در debugging سورس را منتشرکرده است.

اگر قرار بود تمامی کتابخانه ها و API ها به صورت سورس باز باشد که دیگر کسی نمی توانست درآمد داشته باشد.
در فایل های هدر .h فقط تعاریف قرار می گیرد و معمولا پیاده سازی ها در کتابخانه های کامپایل شده قرار می گیرند (در قالب یک dll یا به صورت استاتیک در یک Lib) مگر در برخی موارد نادر که سورس نیز موجود باشد. (در غیر این صورت در برخی از موارد می توان با پرداخت هزینه، یک لیسانس از سورس کد ها از شرکت سازنده گرفت)

موفق باشید

ahmadr
چهارشنبه 20 شهریور 1387, 20:42 عصر
بله حق با شماست ولي من منظورم فقط ويندوز نبود ،آيا در يونيكس يا لينوكس هم همينطور است ؟

linux
چهارشنبه 20 شهریور 1387, 23:17 عصر
توجه کنید که فقط سورس برخی از کتابخانه ها در دسترس می باشد نه تمامی آن ها، مانند بسیاری از کتابخانه های استاندارد ++C که مایکروسافت لیسانس و همین طور اجازه انتشار سورس آن را از شرکت هایی مثل dinkumware گرفته است (و یا حتی خودش پیاده سازی کرده است) و جهت سهولت در debugging سورس را منتشرکرده است.

اگر قرار بود تمامی کتابخانه ها و API ها به صورت سورس باز باشد که دیگر کسی نمی توانست درآمد داشته باشد.
در فایل های هدر .h فقط تعاریف قرار می گیرد و معمولا پیاده سازی ها در کتابخانه های کامپایل شده قرار می گیرند (در قالب یک dll یا به صورت استاتیک در یک Lib) مگر در برخی موارد نادر که سورس نیز موجود باشد. (در غیر این صورت در برخی از موارد می توان با پرداخت هزینه، یک لیسانس از سورس کد ها از شرکت سازنده گرفت)

موفق باشید
در آمد ربطی به اپن سورس نداره، gcc اپن سورس هست ، تمامی پیاده سازی هاش را هم می توانید ببنید

Nima_NF
پنج شنبه 21 شهریور 1387, 12:37 عصر
بله حق با شماست ولي من منظورم فقط ويندوز نبود ،آيا در يونيكس يا لينوكس هم همينطور است ؟
چون شما در مورد VC صحبت کردید آن موضوع را مطرح کردم،

در لینوکس به این شکل نیست و پیاده سازی همه چیز در دسترس شماست. با توجه به وسعت کتابخانه ها ممکن است سورس کد همه آن ها همراه کامپایلر (مانند gcc) عرضه نشود، اما با توجه به نیازتان می توانید سورس کد آخرین نسخه کتابخانه دلخواه را از اینترنت دریافت کنید و حتی کامپایل و استفاده کنید.

برای سورس کد socket ها که شما ذکر کردید می توانید آخرین نسخه glibc یا همان GNU C Library را (مثلا glibc-2.7.tar.gz ) دانلود کنید:
http://ftp.gnu.org/gnu/glibc/

ahmadr
پنج شنبه 21 شهریور 1387, 20:45 عصر
برای سورس کد socket ها که شما ذکر کردید می توانید آخرین نسخه glibc یا همان GNU C Library را (مثلا glibc-2.7.tar.gz ) دانلود کنید:
http://ftp.gnu.org/gnu/glibc/

با تشکر از Nima_NF
من glibc-2.7.tar.gz را دانلود کردم اما برای socket سورسی نداشت فقط در آخرین مرحله از جستجوها این خط از تعریف socket را در هدر sys/socket.h یافتم :

;extern int socket (int __domain, int __type, int __protocol) __THROW

فکر میکنم کلمه extern به یک فایل دیگه اشاره میکنه که این توابع در اونجا پیاده سازی شدن.

Nima_NF
پنج شنبه 21 شهریور 1387, 22:50 عصر
انتظار نداشته باشید برای پیدا کردن سورس یک تابع خیلی راحت فقط به یک فایل مراجعه کنید و همه چیز آنجا باشد، یک تابع گاه توسط صدها ماکرو و در فایل های مختلف پیاده سازی می شود.
در هدر فایل ها (.h) معمولا سورس کدها قرار نمی گیرد.

برای اینکه به پیاده سازی های یک تابع برسید باید تمامی ماکرو ها و تغییر نام های جایگزین را نیز دنبال کنید، در ویندوز XP با زدن F3 به پنجره جستجو می روید و در قسمت جستجوی فایل ها در فیلد A Word or phrase in the file ،کلمه مورد نظر خود را جستجو کنید مانند socket تا فایل هایی که این کلمه در آن ها استفاده شده است را ببینید تا در نهایت به سورس تعریف تابع برسید.

توجه کنید که فقط در فولدر socket جستجو نکنید بلکه در کل glibc جستجو کنید.