سؤال

خدع في Stackoverflow بواسطة أحد أصدقائي الذين لديهم نفس المشكلة:

لقد قمت بنسخ الكود من هذا البرنامج التعليمي: http://www.thegeekstuff.com/2012/04/create-proc-files/

وقمت بإنشاء الوحدة التي أنشأت ملف procfile الخاص بي.

لقد كنت سعيدًا عندما وجدت أنني حصلت على ملف procfile يمكنني تكرار "نص"> proc/name_of_procfile

يمكنني أيضًا القراءة مع القطة!!

لقد كنت أخدع به ولدي الآن عدد كبير من القيم في ملفي الشخصي - كلما قمت بالقطط فإنه يمر عبر هذه القيم بالتسلسل:

س 1. أتساءل - كيف يمكنني حذف القيم من ملف procfile؟

أيضًا، لاحقًا، سأحاول الحصول على السلوك الذي ينص على أنه عندما يقرأ ملف ملف procfile الخاص بي، فإنه يغير قيمة كل ما قرأه للتو في ملف proc_file.

س2.أعلم أنه سيتم تنفيذ ذلك في طريقة "int read_info" الخاصة بي، ولكن هل هناك أي مؤشرات حول كيفية القيام بذلك؟

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

المحلول

س1.

لا يمكنك حذف هذه القيم بالمعنى الطبيعي لعملية الحذف على نظام الملفات.يمكنك echo شيء ما في ملف procfile إذا كان قابلاً للكتابة.ثم يعتمد الأمر على سلوك الوحدة وكيفية التعامل مع هذه البيانات "الواردة".هل سيتم تخزينها أو التخلص منها أو احتسابها داخليًا بأي شكل من الأشكال - تقرر الوحدة ذلك.ولكي نكون أكثر دقة، فإن المنطق الذي وضعته في الوحدة يحدد العلاج.الوحدة في هذا المثال لها منطق بسيط جدًا:فهو يحفظ سلسلة في مخزنه المؤقت الداخلي عندما تستدعي النواة سلسلة نصية write_info الوظيفة - في الواقع تقوم بربط بيانات جديدة مع المحتوى الحالي.ثم يمكنها إرجاع محتوى هذا المخزن المؤقت عندما تستدعي kernel وظيفة read_info الخاصة بها.لذلك إذا قمت بذلك:

echo "some text">/proc/yourprocfile
echo "another text">/proc/yourprocfile

ثم cat /proc/yourprocfile سوف طباعة

some text
another text

على الشاشة.كي تختصر:السلوك الكامل لهذه الملفات هو module-defined.

س2.

يمكنك القيام بذلك تقريبًا مثلما تفعل ذلك كالمعتاد C برنامج.هناك نوعان من الاختلافات الرئيسية:

  • تختلف واجهة برمجة التطبيقات التي يمكن الوصول إليها في وضع kernel.بعض الوظائف لها نفس الأسماء والوظائف أو مشابهة جدًا لنظائرها في المعيار C المكتبة لديها.الوظائف الأخرى لها أسماء مختلفة ولكنها لا تزال مشابهة لبعض وظائف مساحة المستخدم.وبعد ذلك، بعض الوظائف المحددة المتوفرة فقط في مساحة النواة.

  • يجب أن يتم فحص كل ما تفعله في مساحة kernel عدة مرات وتصحيح أخطائه on the sheet of paper نظرًا لأن أي خطأ في الوحدة النمطية الخاصة بك قد يتسبب في تفريغ النواة الأساسية على الأقل (تتوقف النواة فقط ثم يتعين عليك الضغط reset زر لإعادة تشغيل النظام الخاص بك) وقد يتسبب في تلف بيانات أنظمة الملفات لديك في أسوأ الأحوال.

لذا، أنصحك بإعداد حزمة VirtualBox؛لإنشاء آلة افتراضية باستخدام هذه الأداة الجميلة؛لتثبيت الحد الأدنى من إصدار Linux هناك ولأخذ لقطة من القرص الافتراضي الخاص به بعد التثبيت.لذا، إذا حدث خطأ ما، فيمكنك دائمًا إصلاح أي ضرر.لا تحتاج إلى تثبيت جميع أدوات البناء ومصدر kernel الخاص بك هناك - ستقوم فقط بتحميل واختبار/تصحيح الوحدات النمطية/التطبيقات الخاصة بك على هذا الجهاز الظاهري.

لكن على أية حال، المنطقة التي ستلمسها، أو، لكي نكون أكثر صحة، التي تم لمسها بالفعل، هي منطقة مثيرة للاهتمام للغاية.

حظ سعيد

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