سؤال

لماذا statfs() و statvfs() المكالمات على حد سواء موجودة عندما تكون متشابهة جدا؟

تحت أي ظروف سوف أفضل واحدة على الآخر؟

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

المحلول

خطأ، "الأسباب التاريخية".

في الأصل 4.4BSD محددة statfs() يتصل. قام Linux في وقت لاحق بتطبيق مكالمة مختلفة قليلا بنفس الاسم. بوسيكس توحيدها بين جميع إصدارات FREENIX و UNIX عن طريق تحديد statvfs().

statfs() هو نظام التشغيل الخاص

statvfs() هو posix مطابقة

لأنهم جميعا يعودون هياكل مختلفة قليلا، في وقت لاحق يمكنهم أن يحل محل الأول.

بشكل عام يجب عليك استخدامها statvfs(), ، بوسيكس واحد. كن حذرا حول نصيحة "استخدام POSIX"، كما هو الحال في بعض الحالات (PTY، على سبيل المثال) The BSD (أو أيا كان) واحد أكثر محمولة في الممارسة.

نصائح أخرى

إذا كنت تريد فقط سعة نظام الملفات ومعلومات الاستخدام، فإن الإجابات الأخرى صحيحة: تفضل statvfs لأنها ستوسيكس القياسية وتتناول أحجام الملفات الكبيرة بشكل أفضل. statfs هو BSD- و Linux الخاص، مع هياكل مختلفة على كل منها. (لينكس 2.6 أضيف جديد statfs64 و fstatfs64 يدعو النظام الذي يستخدم بنية موسعة للتعامل مع الأحجام الكبيرة.) ومع ذلك، statfs لا يزال مفيدا في Linux لتحديد نوع نظام الملفات (على افتراض أنك بخير مع كتابة رمز Linux الخاص).

statfs() تم إهمالها لصالح statvfs(), ، أي اتفاقات إلى حد كبير أفضل مع دعم الملفات الكبيرة. statfs() من المعروف أن تفعل أشياء غريبة للأحجام التي تتجاوز قيمة طويلة غير موقعة.

بقدر ما أستطيع أن أقول (وتذكر)، statvfs() كان موجودا منذ Redhat 7.3، بعد إدخاله باستبدال Posix. من المحتمل أن تجدها على الأنظمة الحديثة (معظم).

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