سؤال

لن يكون صعبا, أليس كذلك ؟ أليس كذلك ؟

أنا حاليا تتصفح OpenAFS برنامج إلى العثور على رأس تعريف pioctl.لقد طرح كل ما لدي في ذلك:فحص ctags, grepped مصدر رمز pioctl ، إلخ.الأقرب عندي أن الرصاص هو حقيقة أن هناك ملف pioctl_nt.ح الذي يحتوي على التعريف ، إلا إنه في الواقع ليس ما أريد لأن أيا من userspace قانون مباشرة يشمل إنه Windows معينة.

الآن, أنا لا أتوقع منك أن تذهب و تحميل OpenAFS تعليمات البرمجة الأساسية و تجد ملف الرأس بالنسبة لي.أنا الغريب, على الرغم من:ما هي التقنيات الخاصة بك من أجل العثور على رأس الملفات التي تحتاج إليها عندما فشل كل شيء آخر?ما هي أسوأ السيناريوهات التي يمكن أن تسبب البقرى على pioctl في تعليمات البرمجة الأساسية في الواقع لا تأتي مع أي شيء يشبه وظيفة التعريف ؟

يجب أن نلاحظ أيضا أن لدي الوصول إلى اثنين من المستقلين userspace البرامج التي فعلت ذلك بشكل صحيح ، لذلك من الناحية النظرية لا يمكن أن تفعل O(n) البحث عن وظيفة.ولكن أيا من رأس الملفات تخرج لي ، و ن كبير...

تحرير: فورا تم حل المشكلة:pioctl() هو ضمنيا ، كما يتضح من هذا:

AFS.xs:2796: error: implicit declaration of function ‘pioctl’
هل كانت مفيدة؟

المحلول

إذا grep -r و ctags هي الفشل ، ثم إنه من المحتمل أن يعرف بأنه نتيجة سيئة الكلية(s).يمكنك محاولة صنع أبسط ممكن ملف المكالمات pioctl() و يجمع بنجاح ، ومن ثم تجهيزها أن نرى ما سيحدث:

gcc -E test.c -o test.i
grep pioctl -C10 test.i

نصائح أخرى

هناك خيارات برنامج التحويل البرمجي لإظهار المعالج الانتاج.حاول هؤلاء ؟ في مروع السؤال حيث كان رأسي فارغ تماما من أي تعريف الخيار-E (في معظم c المجمعين) لا يفعل شيئا سوى بث على معالجة التعليمات البرمجية.

في المعلومات المطلوبة:عادة أنا فقط التقاط تجميع الملف في السؤال كما هو الإخراج على الشاشة بسرعة نسخ و لصق و وضع -E بعد استدعاء برنامج التحويل البرمجي.النتيجة سوف يقذف المعالج الإخراج إلى الشاشة حتى إعادة توجيه إلى ملف.ننظر من خلال هذا الملف كافة وحدات الماكرو و أشياء سخيفة بالفعل تؤخذ من الرعاية.

أسوأ السيناريوهات:

  • K&R نمط النماذج
  • وحدات الماكرو يختبئون تعريف
  • ضمني الإعلان (في الجواب)

هل يعتبر استخدام cscope (متوفر من سورس)?

أنا استخدامها على بعض إلى حد كبير رمز مجموعات (25,000+ ملفات يصل ارتفاعها إلى حوالي 20 ، 000 خطوط في ملف) مع نجاح جيدة.يستغرق بعض الوقت لاستخلاص قائمة ملف (5-10 دقائق) و أطول (20-30 دقيقة) لبناء المرجعية في قديم الشمس E450 ، ولكن يمكنني العثور على نتائج مفيدة.


على قدم المساواة تقريبا القديمة ماك (1GHz dual قدرة شرائية 32 بت المعالجات), cscope تعمل على OpenAFS (1.5.59) رمز المصدر يأتي مع الكثير من الأماكن حيث الوظيفة المعلنة أحيانا المضمنة في التعليمات البرمجية ، وأحيانا في الرؤوس.استغرق الأمر بضع دقائق لمسح 4949 ملفات توليد 58 MB cscope.خارج الملف.

  • openafs-1.5.59/src/sys/sys_prototypes.ح
  • openafs-1.5.59/src/aklog/aklog_main.ج (جنبا إلى جنب مع تعليق "لماذا لا AFS تقديم هذه النماذج؟")
  • openafs-1.5.59/src/sys/pioctl_nt.ح
  • openafs-1.5.59/src/auth/المجلس الانتقالي.ج يتضمن تحديد PIOCTL
  • openafs-1.5.59/src/sys/pioctl_nt.ج يوفر تنفيذ ذلك
  • openafs-1.5.59/src/sys/rmtsysc.ج يوفر تنفيذ ذلك (وأحيانا afs_pioctl() بدلا من ذلك)

بقية 184 الحالات وجدت يبدو أن يستخدم وظيفة ، أو الوثائق المرجعية ، أو ملاحظات الإصدار سجلات التغيير ، وما شابه ذلك.

العمل الحالية نظرية أننا قد قررت على بعد دس في المعالج و عدم العثور على أي شيء ، هو أن OpenAFS هو السماح مترجم استنتاج النموذج من وظيفة ، حيث تقوم بإرجاع عدد صحيح ويأخذ المؤشر, صحيح, مؤشر, صحيح كما معالمها.سوف يكون التعامل مع هذا مجرد تعريف بنفسي.

تحرير:ممتازة!لقد وجدت بندقية التدخين:

AFS.xs:2796: error: implicit declaration of function ‘pioctl’

في حين الأصلي العامة السؤال تمت الإجابة, إذا كان أي شخص يصل في هذه الصفحة أتساءل أين تجد ملف الرأس الذي يحدد pioctl:

في الإصدارات الحالية من OpenAFS (1.6.7) ، protoype على pioctl هو محدد في sys_prototypes.ح.ولكن هذا الوقت أن هذا السؤال كان في الأصل طلب هذا الملف لم تكن موجودة ولم يكن هناك نموذج pioctl مرئية من خارج OpenAFS رمز الشجرة.

ومع ذلك ، فإن معظم المستخدمين من pioctl ربما تريد أو على الأقل موافقة على استخدام lpioctl ("المحلية" pioctl) الذي دائما قضايا syscall على الجهاز المحلي.هناك نموذج لهذا في afssyscalls.ح (وفي هذه الأيام أيضا sys_prototypes.ح).

الخيار الأسهل في هذه الأيام, رغم أن, هو فقط استخدام libkopenafs.على أن تشمل kopenafs.ساعة, استخدام وظيفة k_pioctl, و رابط ضد -lkopenafs.الذي يميل إلى أن يكون أكثر من ذلك بكثير مريحة واجهة من محاولة الارتباط مع OpenAFS libsys وغيرها من الاشياء.

لا أنه عادة ما تقول في رجل الصفحة ملخص?

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