سؤال

أنا أفهم أن الدليل هو مجرد ملف في UNIX يحتوي على أرقام INODE وأسماء الملفات داخلها. كيف ألقي نظرة على هذا؟ لا أستطيع استخدام القط أو أقل على دليل، وفتحه في السادس يظهر لي فقط إدراج الملفات ... لا أرقام iNode.

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

المحلول

لأن هذا هو سؤال البرمجة يكون سؤال البرمجة، أليس كذلك؟)، يجب عليك التحقق من opendir, readdir و closedir المهام. هذه هي جزء من المواصفات UNIX واحدة.

#include <sys/types.h>
#include <dirent.h>

DIR *opendir (const char *dirname);
struct dirent *readdir(DIR *dirp);
int closedir(DIR *dirp);

ال dirent.h يجب أن يكون الملف الهيكل الذي تحتاجه، الذي يحتوي على على الأقل:

char   d_name[]    name of entry
ino_t  d_ino       file serial number

يرى هنا ل readdir manpage - أنه يحتوي على روابط للآخرين.

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

نصائح أخرى

في الأيام القديمة - الإصدار 7، النظام الثالث، النظام المبكر V - يمكنك بالفعل فتح دليل وقراءة المحتويات في الذاكرة، خاصة بالنسبة لنظام ملفات UNIX القديم مع أرقام INODE 2 بايت وحد من 14 بايت على الملف اسم.

نظرا لأن أنظمة الملفات الغريبة أصبحت أكثر انتشارا، فإن Opendir ()، Readdir ()، CloseDir () Filled () يجب استخدام مكالمات أسرة الوظائف بدلا من ذلك لأن تحليل محتويات الدليل أصبح غير تافهة بشكل متزايد.

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

يبدو وكأنه stat أمر قد يكون في النظام. من المقال:

stat /etc/passwd

    File: `/etc/passwd'
    Size: 2911                Blocks: 8 IO    Block: 4096 regular file
    Device: fd00h/64768d      Inode: 324438   Links: 1
    Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
    Access: 2008-08-11 05:24:17.000000000 -0400
    Modify: 2008-08-03 05:11:05.000000000 -0400
    Change: 2008-08-03 05:11:05.000000000 -0400
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top