سؤال

عند إنشاء مآخذ التوصيل أو فتح/إنشاء الملفات في لغة C، هل يضمن واصف الملف الذي تم تعيينه للمقبس/الملف أن يكون الواصف الأقل قيمة متاحًا؟ماذا تقول مواصفات لغة C عن تعيين واصف الملف في هذا الصدد، إن وجد؟

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

المحلول

وليس من المضمون أن تكون هذه القيمة هي الأدنى، كما أنها تعتمد على التنفيذ (1).بشكل عام، ومع ذلك، يستخدم الروتين الذي يعين واصفات الملفات المفتوحة طريقة تمنحك أول عملية فتح.من الممكن أن يكون ذلك فورًا بعد توفر العديد من العناصر الأقل، مما يترك لك وصفًا أعلى مما قد تتوقعه.

السبب الوحيد الذي يجعلني أفكر في معرفة ذلك، هو وظيفة التحديد، والتي يتم تسريعها إذا قمت بتمريرها إلى أعلى واصف ملف تحتاج إلى التحقق منه.

(1) لاحظ أن تلك التطبيقات التي تتبع معيار IEEE تضمن أقل واصف غير مستخدم للملفات، لكن هذا قد لا ينطبق على المقابس.لا يتبع كل تطبيق معيار IEEE الخاص بـ open()، لذا إذا كنت تكتب برنامجًا محمولًا فمن الأفضل عدم الاعتماد عليه.

نصائح أخرى

لا أعتقد أنك ستجده في مواصفات C، على الأرجح في مواصفات نظام التشغيل لديك.لقد كانت تجربتي في Linux هي أنها دائمًا الأقل.

سأواجه هذا بسؤال آخر - لماذا هذا مهم؟لا ينبغي عليك مقارنة واصف الملف بأي شيء (ما لم يتم التحقق من stdin/stdout/stderr) أو إجراء العمليات الحسابية معه.طالما أنه يناسب int (ويضمن ذلك) فهذا كل ما تحتاج إلى معرفته حقًا.

ستيف م على حق.ليس لدى لغة C فكرة عن المقابس، وتستخدم وظائف الإدخال/الإخراج للملف الخاص بها [مؤشر إلى] كائن FILE، وليس واصفًا.

@aib تستخدم كل من open() و Close() و lseek() و read() و write() جميعها واصفات الملفات.نادرًا ما أستخدم التدفقات للإدخال/الإخراج.

@Kyle يهم بسبب عبارات مثل تحديد ().معرفة أعلى واصف يمكن أن يحسن الأداء.

تقول مواصفات C أنها تعتمد على التنفيذ.إذا كنت تنظر إلى تطبيق Unix، فإن صفحة الدليل الخاصة بـ open(2) تقول "سيكون واصف الملف الذي تم إرجاعه بواسطة استدعاء ناجح هو واصف الملف الأقل رقمًا وغير المفتوح حاليًا للعملية."

يساعد هذا إذا كنت تحاول إرفاق ملف معين بواصف محدد.لنفترض أنك تريد إعادة توجيه stderr إلى /dev/null.شيء مثل

إغلاق(2);open("/dev/null", O_WRONLY);

يجب أن تفعل ذلك.يجب عليك بالطبع التقاط fd الذي تم إرجاعه بواسطة open والتأكد من أنه 2.

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