سؤال

لقد كنت أتساءل كيف يعمل Scanf () / printf () في الواقع في مستويات الأجهزة والنظام التشغيل. أين تدفق البيانات وما هو بالضبط الذي يفعله نظام التشغيل في هذه الأوقات؟ ما المكالمات التي يقوم بها نظام التشغيل؟ وما إلى ذلك وهلم جرا...

هل كانت مفيدة؟

المحلول

SCANF () و PrintF () () هي وظائف في LIBC (المكتبة القياسية C)، وهي تسمون نظام التشغيل القراءة () والكتابة () Syscalls على التوالي، والتحدث إلى واصفات الملف Stdin و Stdout على التوالي (FSCANF و FPRINTF يسمح لك بذلك حدد دفق الملف الذي ترغب في القراءة / الكتابة منه).

يؤدي المكالمات إلى القراءة () والكتابة () (وجميع syscalls) إلى "تبديل السياق" من تطبيق مستوى المستخدم الخاص بك إلى وضع Kernel، مما يعني أنه يمكن إجراء عمليات مميزة، مثل التحدث مباشرة إلى الأجهزة. اعتمادا على كيفية بدء تشغيل التطبيق، من المحتمل أن تكون واصفات الملفات "Stdin" و "Stdout" مرتبطة بجهاز وحدة التحكم (مثل TTY0)، أو نوعا من جهاز وحدة التحكم الظاهري (مثل هذا يتعرض بواسطة Xterm). قراءة () والكتابة () قم بأمان بنسخ البيانات من / إلى مخزن مؤقت Kernel يسمى "UIO".

لا يحدث جزء تحويل سلسلة التنسيق من SCANF و PrintF في وضع kernel، ولكن فقط في وضع المستخدم العادي (داخل "LIBC")، فإن القاعدة العامة للإبهام مع SYSCALLS هل يمكنك التبديل إلى وضع Kernel بشكل غير منتظم، سواء تجنب الأداة العامة لتحويل السياق، والأمن (عليك أن تكون حريصا للغاية بشأن أي شيء يحدث في وضع kernel! أقل رمز في وضع kernel يعني أقل الحشرات / فتحات الأمن في نظام التشغيل).

راجع للشغل .. لقد كتب كل هذا من منظور يونيكس، وأنا لا أعرف كيف يعمل MS Windows Windows.

نصائح أخرى

على نظام التشغيل الخاص بي، أنا أعمل مع SCANF و PrintF تعتمد على وظائف Getch () OmT Putch ().

أعتقد أن نظام التشغيل يوفر فقط اثنين من الجداول، واحدة للمدخلات والآخر للإخراج، والتدفقات ملخص بعيدا كيفية تقديم بيانات الإخراج أو حيث تأتي بيانات الإدخال من.

إذن ما يفعله Scanf & Printf هو مجرد إضافة بايت (أو استهلاك بايت) من أي من الجداول.

SCANF، PRINTF، إلخ لا يمكن كتابة جميع أنواع الوظائف هذه داخليا مباشرة في لغة C / C ++. داخليا انهم جميعا مكتوبة في لغة التجميع من خلال استخدام Kword "ASM", ، يتم تقديم أي شيء مكتوب بكلمة رئيسية "ASM" بشكل مباشر إلى ملف الكائن بغض النظر عن الترجمة (غير متغير حتى بعد التجميع)، وفي لغة التجميع، حصلنا على رموز محددة مسبقا يمكنها تنفيذ كل هذه الوظائف ...... SCANF PRINTF الخ جميعا مكتوبة في لغة التجميع داخليا. يمكنك تصميم وظيفة الإدخال الخاصة بك باستخدام الكلمة الأساسية "ASM".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top