ماذا يمكنني أن أفعل إذا جيتكود () و جيتنف ("الأشخاص ذوي الإعاقة") لا تتطابق?

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

سؤال

لدي أداة بناء النظام الذي يستخدم getcwd() للحصول على دليل العمل الحالي.هذا رائع ، باستثناء أنه في بعض الأحيان يكون لدى الأشخاص مساحات في مساراتهم ، والتي لا يدعمها نظام البناء.كنت تعتقد أنه يمكنك فقط إنشاء رابط رمزي:

ln -s "Directory With Spaces" DirectoryWithoutSpaces

ثم كن سعيدا.لكن لسوء الحظ بالنسبة لي, getcwd() يحل جميع الروابط الرمزية.حاولت استخدام getenv("PWD"), ، لكنه لا يشير إلى نفس المسار الذي أعود منه getcwd().أنا ألوم make -C لعدم تحديث متغير البيئة ، على ما أعتقد.الآن, getcwd() يعطيني العودة مسار مثل هذا:

/Users/carl/Directory With Spaces/Some/Other/Directories

و getenv("PWD") يعطيني:

/Users/carl/DirectoryWithoutSpaces

لذلك-هل هناك أي وظيفة مثل getcwd() هذا لا يحل الروابط الرمزية?

تحرير:

لقد تغيرت

make -C Some/Other/Directories

إلى

cd Some/Other/Directories ; make

ثم getenv("PWD") يعمل..إذا لم يكن هناك حل آخر ، يمكنني استخدام ذلك.

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

المحلول

وفقا للبرمجة المتقدمة في الكتاب المقدس للبيئة يونكس من قبل ستيفنز ، ص.112:

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

عذرا ، يبدو أنك بحاجة إلى التغلب على هذا بطريقة أخرى.

نصائح أخرى

لا توجد طريقة ل getcwd() لتحديد المسار الذي اتبعته عبر روابط رمزية.التنفيذ الأساسي ل getcwd() احصائيات الدليل الحالي '.'،ثم يفتح الدليل الأصل '..'ومسح الإدخالات حتى يجد اسم الدليل مع نفس رقم إينود كما '.'لديها.ثم يكرر العملية لأعلى حتى يعثر على الدليل الجذر ، وعند هذه النقطة يكون له المسار الكامل.في أي وقت من الأوقات لا يجتاز رابطا رمزيا.وبالتالي فإن الهدف من وجود getcwd() حساب المسار المتبع عبر الروابط الرمزية أمر مستحيل ، سواء تم تنفيذه كدعوة نظام أو كدالة مكتبة.

أفضل دقة هي التأكد من أن نظام الإنشاء يتعامل مع أسماء المسارات التي تحتوي على مسافات.وهذا يعني نقلا عن أسماء المسارات التي مرت عبر الغلاف.برامج ج لا تهتم بالمساحات الموجودة في الاسم;أنها ليست سوى عندما يفسر برنامج مثل قذيفة السلاسل التي واجهت مشاكل.(المجمعين تنفيذها كما البرامج النصية قذيفة التي تعمل قبل المعالجات غالبا ما يكون مشاكل مع أسماء المسارات التي تحتوي على مسافات-يتحدث من التجربة.)

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