سؤال

أنا أكتب برنامج C في لينكس.تتطلب أوامر مثل execv() مسارًا على شكل سلسلة c.هل هناك أمر سيعيد المسار الحالي في شكل سلسلة نمط C؟

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

المحلول

جيتكود ():

ملخص

#include <unistd.h>

char *getcwd(char *buf, size_t size);

وصف

ال جيتكود () يجب أن تضع الدالة اسم مسار مطلق لدليل العمل الحالي في المصفوفة المشار إليها buf، والعودة buf.يجب ألا يحتوي اسم المسار المنسوخ إلى المصفوفة على أي مكونات تمثل روابط رمزية.ال مقاس الوسيطة هي الحجم بالبايت لمصفوفة الأحرف التي يشير إليها الملف buf دعوى.لو buf مؤشر فارغ، وسلوك getcwd() غير محدد.

قيمة الإرجاع

عند الانتهاء بنجاح، جيتكود () يجب أن يعود buf دعوى.خلاف ذلك، جيتكود () يجب إرجاع مؤشر فارغ وتعيين خطأ للإشارة إلى الخطأ.محتويات المصفوفة المشار إليها بواسطة buf ثم غير محددة....

نصائح أخرى

ال طريق الوسيطة إلى execv() هي المسار إلى التطبيق الذي ترغب في تنفيذه، وليس دليل العمل الحالي (الذي سيتم إرجاعه بواسطة getcwd()) أو مسار بحث الصدفة (الذي سيتم إرجاعه بواسطة getenv("PATH")).

اعتمادًا على ما تفعله، قد تحصل على مزيد من الأميال من وظيفة system() في مكتبة C بدلاً من عائلة exec() ذات المستوى الأدنى.

هذا هو لا أنسي ج:

#include <unistd.h>

char path[MAXPATHLEN];
getcwd(path, MAXPATHLEN);
printf("pwd -> %s\n", path);

إذا كان المسار يمكن أن يكون مسارًا نسبيًا ، فيجب أن تكون قادرًا على استخدام ". أو "./" كمسار.لست متأكدًا مما إذا كان سينجح، لكن يمكنك تجربته.

أنا لست مبرمجًا محترفًا، لذا فهذه ليست إجابة دقيقة.

ما عليك القيام به هو الحصول على متغير البيئة PWD (دليل العمل الحالي)

لست متأكدًا من المكتبة الموجودة بها ولكنها رأس Linux قياسي.

سأنظر حولي وأرى إن كان بإمكاني العثور عليه.

يحرر:

كنت أفكر في ،getenv() الأمر الذي قد يساعدك إذا كنت بحاجة أيضًا إلى تشغيل أوامر النظام وتحتاج إلى مسارات الصناديق المختلفة الموجودة في PATH

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