طريقة منصة التبادل لاختبار ما إذا كان الملف دليلًا

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

سؤال

حاليا لدي بعض التعليمات البرمجية مثل (المكثف وإزالة مجموعة من التحقق من الأخطاء):

dp = readdir(dir);
if (dp->d_type == DT_DIR) {
}

هذا يعمل بسباحة على جهاز Linux الخاص بي. ولكن على آلة أخرى (يشبه Sunos ، SPARC):

SunOS HOST 5.10 Generic_127127-11 sun4u sparc SUNW,Ultra-5_10

أحصل على الخطأ التالي في وقت الترجمة:

error: structure has no member named `d_type'
error: `DT_DIR' undeclared (first use in this function)

اعتقدت dirent.h كان الرأس crossplatform (لآلات posix). أي اقتراحات.

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

المحلول

المرجع http://www.nexenta.org/os/porting_codefixes:

لا يحتوي تعريف الهيكل dirent في Solaris على d_type ميدان. ستحتاج إلى إجراء التغييرات على النحو التالي

if (de->d_type == DT_DIR)
{
   return 0;
}

تغيير الى

struct stat s; /*include sys/stat.h if necessary */
..
..
stat(de->d_name, &s);
if (s.st_mode & S_IFDIR)
{
  return 0;
}

حيث stat هو أيضا posix القياسي ، يجب أن يكون أكثر منصة منصة. لكن قد ترغب في الاستخدام if ((s.st_mode & S_IFMT) == S_IFDIR) لمتابعة المعيار.

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