نوع مؤشر الملف، تميز الكلية / st_mode stat.h قيمة رمز ملف العادية

StackOverflow https://stackoverflow.com/questions/1041616

  •  22-07-2019
  •  | 
  •  

سؤال

واني اسعى الى تحديد أنواع الملفات إدخالات الدليل (ويندوز يونكس الخ ..).

في تميز الكلية / stat.h ارتفاع nybble أجل كلمة st_mode ديك ترميز القيم:

#define S_IFDIR  0x4000  /* directory */
#define S_IFIFO  0x1000  /* FIFO special */
#define S_IFCHR  0x2000  /* character special */
#define S_IFBLK  0x3000  /* block special */
#define S_IFREG  0x8000  /* or just 0x0000, regular */

ومن التعليق على ما يبدو فإن nybble يمكن أن تكون إما 0 أو 8 لتمثيل و"ملف العادية '.

وهكذا هذا يطرح السؤال: في أي ظرف من الظروف هو عليه 0 وليس 8؟ إذا كنت قد حددت هذه الرموز، وأود أن محفوظة ل0 inidicate غير معروف / غير محدد / غير صالح / لا واحد في ملف أو شيء من هذا القبيل.

والواقع الماكرو S_ISREG هو:

#define S_ISREG(m)  ((m) & S_IFREG)

وهذا ما يبدو لي للإشارة إلى أنه ينبغي ملف العادية دائما يتوقع أن يكون رمز 8 (و0 سيكون abberation ل؟).

وسيكون من الافتراض صحيحا لتفسير 0 كملف غير معروف أو غير صالح وتجاهل تعليق 'أو مجرد 0x0000 "ونتوقع دائما 8 لاستخدامها لكافة الملفات العادية؟

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

المحلول

وتشير معظم المصادر أن فحص S_ISREG كفى لست متأكدا عندما كنت انظر 0x0000 كملف "العادية".

وأعتقد أن بعض التطبيقات القديمة المستخدمة 0x0000 (القديمة حقا البحث رأس DJGPP يتحول هذا الأمر) ولكن من الإشارة الحقيقية الوحيدة التي يمكنني أن تجد. كل شيء آخر نقطة ل0x8000.

والأساس، واستخدام S_ISREG الكلي، ونأمل أن الرأس على كل ما كنت تجميع ضد يفعل الشيء الصحيح.

نصائح أخرى

وأود أن نثق تعاريف S_IFREG وS_ISREG. لم يسبق لي ان عملت مع نظام الملفات التي كسرت تلك حدات الماكرو.

وتخميني هو أن تعريف 0x0000 عن ملف العادية للتعامل مع أنظمة الملفات القديمة التي قد تستخدم ترميز مختلف المعلومات نوع الملف. ما OS ونظام الملفات الذي تستخدمه؟

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