كيف يمكنني قراءة دليل كملف في يونيكس؟
سؤال
أنا أفهم أن الدليل هو مجرد ملف في 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