سؤال

هل من الممكن الحصول على مسار مخلص من الرابط الذي يشير إليه؟ هل هناك أي أمر نظام بسيط؟

أحتاج إلى كل ما بعد نظام التشغيل HP-UX 11i، 1123U، 1123i AIX 5.2 و 5.3 Suse Linux 10 Solaris 10

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

المحلول

لم تحدد لغة، لذلك أفترض أنك تريد أمر يمكن تشغيله في أي قذيفة تستخدمها. ال ls القيادة لديها -l (هذا هو ell) خيار يطبع الكثير من المعلومات حول الملف. آخر القليل من المعلومات هو المسار الكامل، لذلك يجب أن تكون قادرا على القول

ls -l file | awk '{print $NF}'

على أي آلة متوافقة من SUS2 (والتي يجب أن تكون جميع Unixes التجارية). سيكون لهذا مشكلة إذا كان الملف أو أي من الأدلة التي تؤدي إلى الملف لها مسافات رغم ذلك.

نصائح أخرى

إذا كنت تبحث عن مكالمة النظام، فأنت تريد readlink(2). وبعد هذا موحد، وكذلك يجب أن تكون متاحة على جميع أنظمة بوسيكس متوافقة.

إليك مثال على استخدامه، مأخوذة من الرابط المعطى سابقا:

#include <unistd.h>

char buf[1024];
ssizet_t len;

if ((len = readlink("/modules/pass1", buf, sizeof(buf)-1)) != -1)
    buf[len] = '\0';

إذا كنت تبحث عن أداة مساعدة لسطر الأوامر، فلا يبدو أن هناك واحدة موحدة، ولكن جنو (لينكس) و BSD. كلاهما يملكان readlink(1).

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