نمایش نتایج 1 تا 7 از 7

نام تاپیک: توابع کتابخانه ایی C

  1. #1
    کاربر جدید آواتار makhdoosh
    تاریخ عضویت
    تیر 1389
    محل زندگی
    گلستان
    سن
    34
    پست
    29

    Red face توابع کتابخانه ایی C

    دارم سی یاد میگیرم یه سوالی رو کنجکاوم بدونم اینه که یک توضیح در مورد کتابخانه ها میخام. منظورم اینه که مثلا چند نوع کتابخانه داریم. یه چیزای مبهمی تو ذهنم هست که از مطالعه مقالات کلی فهمیدم، مثلا رابطه کتابخانه ها با DLL چیه؟ فرقش چیه؟

    تصوری که خودم دارم اینه که بعضی از توابع که در سی استفاده می کنیم توسط پیش پردازنده قبل از کامپایل شدن به سورس برنامه ایی که نوشتیم اضافه میشن (مثل روشی که خودمون تابع تعریف می کنیم بعد از تابع main ). یا بعضی توابع هم هستند که متعلق به سیستم عامل هستند و هنگام اجرا برنامه در سیستم عامل این برنامه توابع رو از سیستم عامل میخواد و اون هم توابع رو به برنامه معرفی میکنه (فک کنم DLL همین باشه)
    اینا تصور خودمه که با مطالعات پراکنده از منابع انگلیسی (انگلیسیم خیلی ضعیفه) حدس میزنم.
    لطفا اگه در این زمینه اطلاعاتی دارین یه توضیح جامع در مورد ذات توابع و انواعشون و نحوه عمکردشون در پشت صحنه در کل بدید.
    توجه: بنده بیشتر کنجکاو هستم نسبت به اینکه در کل کامپیوتر چگونه کار میکند! یعنی انیکه فعلا قصد برنامه نویس شدن ندارم که مثلا یه پروژه برنامه نویسی تحویل بگیرم و ... لطفا اینقد پیشنهاد ندید که بیا فلان کارو بکن و چه میدونم داری اشتباه می کنی و ...)

  2. #2
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    37
    پست
    1,491

    نقل قول: توابع کتابخانه ایی C

    کتابخانه‌ها یا بصورت دینامیک (DLLها در ویندوز) یا بصورت استاتیک به برنامهٔ ما متصل می‌شوند. DLL مخفف Dynamic Link Library است یعنی اتصال کتابخانه بصورت پویا صورت می‌گیرد (قبل از اجرای برنامه).

    تصوری که خودم دارم اینه که بعضی از توابع که در سی استفاده می کنیم توسط پیش پردازنده قبل از کامپایل شدن به سورس برنامه ایی که نوشتیم اضافه میشن (مثل روشی که خودمون تابع تعریف می کنیم بعد از تابع main ). یا بعضی توابع هم هستند که متعلق به سیستم عامل هستند و هنگام اجرا برنامه در سیستم عامل این برنامه توابع رو از سیستم عامل میخواد و اون هم توابع رو به برنامه معرفی میکنه (فک کنم DLL همین باشه)
    اگر بخواهیم از کتابخانه بصورت استاتیک (فایلی با پسوند LIB در ویندوز و با پسوند a در گنو/لینوکس) استفاده کنیم، توابع مورد نیاز توسط لینکر به سورس برنامه‌ای که نوشته‌ایم اضافه می‌شوند.

  3. #3
    کاربر جدید آواتار makhdoosh
    تاریخ عضویت
    تیر 1389
    محل زندگی
    گلستان
    سن
    34
    پست
    29

    نقل قول: توابع کتابخانه ایی C

    تشکر
    از کجا بفهمم که یک تابع در سی جزو چه دسته ایی هست؟ مثلا تابع ریاضی سینوس در سی جزو کدوم دسته از توابع هست؟
    میشه در مورد نحوه عملکرد DLL ها یه توضیح (حتی اگه کپی پیست از جای دیگه باشه) بزارید.
    در مورد اونی که گفتم توابع به سورس سی برنامه مون اضافه بشه از اونجایی حدس زدم که تو پیش پردازند مینویسیم
    include#
    یعنی بگنجان.


    ببخشید، یه سوال دیگه ایی هم دارم که بهتره همینجا مطرح کنم. میخام تفاوت های میان اجرای یک برنامه بصورت مستقل و تحت ویندوز بدونم. خوب یه حالتی هست که ما سیستم عامل میخایم بنویسیم و یه فایل exe میسازیم که باید با بوت لودر اجرا بشه. یه حالت دیگه که تحت سیستم عامل اجرا میشه مثلا DOS اینا هست
    1. با پسوند COM
    2. با پسوند EXE
    خودم فکر کنم که برنامه هایی با پسوند COM طوری هستند که برنامه نوشته شده توسط ما از خیلی از قابلیت هایی که سیستم عامل به ارائه میشه استفاده میکنه و کار برنامه نویسی رو راحت تر میکنه.
    ولی میخام بدونم وقتی برنامه EXE تحت سیستم عامل اجرا میشه آیا باز هم تحت نظارت سیستم عامل هست که اجرا میشه یا نه سیستم عامل(اینجا منظورم داس هست) کاملا متوقف شده و کنترل کامپیوتر رو به برنامه ما میده؟
    تصور خودم این هست که برنامه های com مثل این هست که در خود سیستم عامل جاسازی میشن یعنی انگار که برنامه نوشته شده توسط ما جزئی از سیستم عامل شده. و تصورم در مورد EXE این هست که هنگام اجرا این برنامه سیستم عامل موقتا کلا غیر فعال میشه و تمام اختیارات رو در اختیار برنامه میزاره تا اینکه از برنامه خارج بشیم و دوباره به سیستم عامل برگردیم.

    البته تمام اینایی که گفتم یه سری تصورات مبهمه من از مطالعات مبتنی بر مقاله هست که ممکنه همش اشتباه باشه، میخام نظر شما رو بدونم.

  4. #4
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    37
    پست
    1,491

    نقل قول: توابع کتابخانه ایی C

    از کجا بفهمم که یک تابع در سی جزو چه دسته ایی هست؟ مثلا تابع ریاضی سینوس در سی جزو کدوم دسته از توابع هست؟
    اگر کتابخانهٔ دینامیک سی مورد استفاده قرار می‌گیرد، پس توابع بکار رفته در برنامه (مثلا تابع printf) به سورس برنامه اضافه نمی‌شود. اگر کتابخانهٔ استاتیک سی مورد استفاده قرار گیرد، چنین توابعی در سورس برنامه اضافه می‌شود. البته نباید بگوییم که تابع به سورس اضافه می‌شود، بلکه این کد ماشین این توابع بعد از کامپایل برنامه در آن جای می‌گیرند (پس در واقع سورس برنامه تغییر نمی‌کند این کد ماشین است که به برنامهٔ نهایی (کامپایل شده) اضافه می‌شود).

    پس ممکن است شما کتابخانهٔ دینامیک را مورد استفاده قرار می‌دهید و شاید هم کتابخانهٔ استاتیک را... در سیستم‌عاملهایی مثل اکثر توزیع‌های گنو/لینوکس، هر دو نوع کتابخانهٔ سی (منظورم کتابخانهٔ استاندارد است) وجود دارند هم دینامیک (فایل‌هایی با پسوند so) و هم استاتیک (فایل‌هایی با پسوند a)... اما در ویندوز تا جایی که می‌دانم فقط می‌توان از کتابخانهٔ استاندارد بصورت استاتیک استفاده کرد زیرا فایل DLL آنها وجود ندارد (برای کامپایلر ++MSVC). در گنو/لینوکس نیز چون هر دو نوع کتابخانهٔ استاندارد سی موجود است، بطور پیش‌فرض از کتابخانهٔ دینامیک استفاده می‌شود مگر اینکه برنامه‌نویس به لینکر بفهماند که می‌خواهد بصورت استاتیک از توابع استفاده کند.

    در مورد اونی که گفتم توابع به سورس سی برنامه مون اضافه بشه از اونجایی حدس زدم که تو پیش پردازند مینویسیم
    include#
    یعنی بگنجان.
    در این حالت، توسط include مشخص می‌شود که چه کلاس‌ها و توابعی را می‌خواهیم استفاده کنیم. در واقع استفاده از include برای زمان کامپایلر است ولی نوع کتابخانه (دینامیک یا استاتیک) مورد استفاده را لینکر است که تعیین می‌کند تا در نهایت آیا کدهای ماشین (تابع) به برنامهٔ نهایی (کامپایل شده) اضافه شود یا خیر.

    میشه در مورد نحوه عملکرد DLL ها یه توضیح (حتی اگه کپی پیست از جای دیگه باشه) بزارید.
    بطور کلی، DLLها یکبار در حافظه قرار می‌گیرند، سپس سایر برنامه‌ها، توابع و کدهای موجود در آن DLL را به اشتراک می‌گذارند و از آنها در زمان اجرا استفاده می‌کنند. به همین خاطر است که لینکر (linker بعد از کامپایلر) باید در مورد استفاده از کتابخانه‌های دینامیک یا استاتیک تصمیم بگیرد. اگر کتابخانه بصورت استاتیک است که هیچ... ولی اگر کتابخانه بصورت دینامیک است، آدرس توابع موجود در DLL باید توسط برنامه‌ها در زمان اجرا مورد استفاده و در دسترس قرار بگیرد.

    ولی میخام بدونم وقتی برنامه EXE تحت سیستم عامل اجرا میشه آیا باز هم تحت نظارت سیستم عامل هست که اجرا میشه یا نه سیستم عامل(اینجا منظورم داس هست) کاملا متوقف شده و کنترل کامپیوتر رو به برنامه ما میده؟
    باز هم تحت نظارت سیستم‌عامل اینکار صورت می‌گیرد، سیستم‌عامل فایل‌های EXE معمولی را در حالت user mode اجرا می‌کند. برنامه‌ها نمی‌توانند بطور مستقیم به سخت‌افزار دسترسی داشته باشند (مگر اینکه سیستم‌عامل اجازه دهد).
    برنامه‌هایی که بدون نیاز به سیستم‌عامل کار می‌کنند،‌ در واقع نه از توابع سیستم‌عامل و نه از سایر کتابخانه‌های کمکی سی (مثل ;کتابخانهٔ استاندارد سی) سود نمی‌برند. بلکه باید بطور مستقیم با جزئیات سخت‌افزار کار کنند و با آن کنار بیایند (کاری که سیستم‌عامل می‌کند).
    متاسفانه من ویندوز را خوب نمی‌شناسم
    در مورد فایل‌های com اطلاعاتی ندارم و تنها می‌توانم جستجو کنم:
    The COM files are raw binary executables and are a leftover from the old CP/M
    machines with 64K RAM. A COM program can only have a size of less than one
    segment (64K), including code and static data since no fixups for segment
    relocation or anything else is included. One method to check for a COM file is
    to check if the first byte in the file could be a valid jump or call opcode, but
    this is a very weak test since a COM file is not required to start with a jump
    or a call. In principle, a COM file is just loaded at offset 100h in the segment
    and then executed.

    OFFSET Count TYPE Description
    0000h 1 byte ID=0E9h
    ID=0EBh
    Those are not safe ways to determine wether a
    file is a COM file or not, but most COM files
    start with a jump.
    این اطلاعاتی بود که من در این مورد داشتم، اگر احیاناً غلط بودند، ممنون می‌شوم دیگر دوستان اصلاح کنند.

  5. #5
    کاربر دائمی آواتار khafan_bat
    تاریخ عضویت
    دی 1387
    محل زندگی
    منظومه ی شمسی-کره زمین-قاره ی آسیا-ایران-گیلان-لاهیجان
    سن
    34
    پست
    111

    نقل قول: توابع کتابخانه ایی C

    من یه چند تا نکته میگم و بس . . . . امیدوارم مفید واقع بشه !!

    کتابخانه های پویا یا Dynamic Link Library چند ویژگی مهم دارند که اون ها رو از سایر کتابخانه ها متمایز می کند :

    الف ) توابع و امکاناتی که در این کتابخانه ها برای استفاده نوشته شده می توانند در یک لحظه توسط چند برنامه مورد استفاده قرار گیرند.

    ب ) DLL ها رو به دو دسته ی سیستمی و غیر سیستمی میشه تقسیم کرد . سیستمی ها شامل یکسری توابع برای ارتباط با سیستم عامل یا استفاده از امکانات اون هست که برای سیستم عامل ویندوز میتونی در پوشه ی windows/system32 یه سری از اونها رو پیدا کنی !
    غیر سیستمی ها هم اونهایی هستند که بتوسط برنامه نویسان یا یه سری شرکت ها نوشته میشوند و شما میتونید اون ها رو به برنامه ی خودتون اضافهخ کنید و از امکانات اونها بهره ببری

    ج )برخی از DLL ها قابلیت اجرایی دارند. ( به تنهایی نمی توانند چون فایل اجرایی نیستند . نیاز به یک راه انداز دارند . برای مثال shimgvw.dll و چنین کتابخانه هایی در ویندوز توسط rundll.exe اجرا می شوند. به تصویر زیر نگاه کن ، پوشه ی سیستم 32 ویندوز من هست :



    اگه بخوای با کتاب خانه های سیستمی ویندوز XP آشنا بشی میتونی به لینک زیر یه سر بزنی :

    حالا چه طور میشه از این توابع در برنامه ی خودمون استفاده کرد ؟؟ خوب برای این کار عبارت API یا API در C++‎‎ تو همین سایت یا گوگل جستجو کنی . برای مثال میخوای برنامه ای بنویسی که دسترسی به یک درایو مثل فلش دیسک رو محدود کنه یا سیستم رو ببره تو هایبرنت ، باید از API مربوط به هون سیستم عامل استفاده کنی ! یه سر به سایت های زیر بزن !!

    آخرین ویرایش به وسیله khafan_bat : جمعه 22 مرداد 1389 در 06:21 صبح

  6. #6
    کاربر جدید آواتار makhdoosh
    تاریخ عضویت
    تیر 1389
    محل زندگی
    گلستان
    سن
    34
    پست
    29

    نقل قول: توابع کتابخانه ایی C

    چند تا نکته ی دیگه هم هست که بعدا بهت میگم !! 

    نوکرتم داداش، اطلاعات خوبی بود. بازم وقت داری توضیح بدی ما میشیم هوادارت هی زرت زرت میتشکریم ازت همه جا

  7. #7
    کاربر دائمی آواتار khafan_bat
    تاریخ عضویت
    دی 1387
    محل زندگی
    منظومه ی شمسی-کره زمین-قاره ی آسیا-ایران-گیلان-لاهیجان
    سن
    34
    پست
    111

    نقل قول: توابع کتابخانه ایی C

    برای استفاده از توابع API در برنامه های خودت کتاب جامع و فوق العاده ی زیر رو که به زبان فارسی هم هست حتما دانلود کن و بخون :



قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •