C opendir 和 readdir 以及 inode
C opendir and readdir and inode
我已将我的程序保存在一个文件夹中,该文件夹中有 5 个文件。现在我想打印文件 inode
编号。这是我的程序:
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <libgen.h>
#include <stdlib.h>
#include <string.h>
int main(){
DIR *dir;
struct dirent *dp;
if((dir = opendir(".")) == NULL){
printf ("Cannot open .");
exit(1);
}
while ((dp = readdir(dir)) != NULL) {
printf("%i\n",(*dp).d_ino);
}
}
这是我的结果
251
250
332
254
257
328
274
283
所以我有5个文件和8个i节点号?怎么可能?
编辑:
当我添加打印这个
printf("%i\n",dp->d_name);
printf("%i\n",dp->d_ino);
我得到这个输出
-27246574
251
-27246550
250
-27246526
334
-27246502
254
-27246470
257
-27246438
328
-27246414
274
-27246382
283
所以我认为我的程序没有在目录中找到文件?
d_name 是一个字符串:
struct dirent {
ino_t d_ino; /* inode number */
off_t d_off; /* offset to the next dirent */
unsigned short d_reclen; /* length of this record */
unsigned char d_type; /* type of file; not supported
by all file system types */
char d_name[256]; /* filename */
};
所以你应该用 %s 打印它,而不是 %i:
printf("%s %i\n",dp->d_name, dp->d_ino);
然后你会看到里面有什么。
我已将我的程序保存在一个文件夹中,该文件夹中有 5 个文件。现在我想打印文件 inode
编号。这是我的程序:
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <libgen.h>
#include <stdlib.h>
#include <string.h>
int main(){
DIR *dir;
struct dirent *dp;
if((dir = opendir(".")) == NULL){
printf ("Cannot open .");
exit(1);
}
while ((dp = readdir(dir)) != NULL) {
printf("%i\n",(*dp).d_ino);
}
}
这是我的结果
251
250
332
254
257
328
274
283
所以我有5个文件和8个i节点号?怎么可能?
编辑: 当我添加打印这个
printf("%i\n",dp->d_name);
printf("%i\n",dp->d_ino);
我得到这个输出
-27246574
251
-27246550
250
-27246526
334
-27246502
254
-27246470
257
-27246438
328
-27246414
274
-27246382
283
所以我认为我的程序没有在目录中找到文件?
d_name 是一个字符串:
struct dirent {
ino_t d_ino; /* inode number */
off_t d_off; /* offset to the next dirent */
unsigned short d_reclen; /* length of this record */
unsigned char d_type; /* type of file; not supported
by all file system types */
char d_name[256]; /* filename */
};
所以你应该用 %s 打印它,而不是 %i:
printf("%s %i\n",dp->d_name, dp->d_ino);
然后你会看到里面有什么。