标签:并且 har 研究 get com png ret 相同 链接
测试mypwd
man -k dir | grep get
得到如下的信息:man getwd
得到如下信息:#include<stdio.h>
#include<unistd.h>
int main(){
char a[100];
getwd(a);
printf("%s\n",a);
return 0;
}
1.打开文件目录查看所有目录如果查到当前目录中有两个相同的" ."文件说明已经到了文件根目录,也就是说本目录的i-node与上级目录的i-node相同。
2.否则进入".."文件目录,并且将上一级件目录名记录添加到数组中
3.直到符合1的条件为止
man -k open | grep dir
找到了符合条件的函数:opendir。man -k read | grep dir
,找到符合条件的函数:readdirman -k close | grep dir
,找到符合条件的函数:closedirman opendir
,man readdir
,man closedir
等得知各个函数所需的头文件以及函数参数struct dirent{
ino_t d_ino;//文件结点号
off_t d_off;
unsigned short d_reclen;
unsigined char d_type;
char d_name[256];//文件名
}
最重要的一点是要进入到上级目录中去,所以我man -k dir | change
,没有查处结果,我就直接man -k dir
,找到如下结果:
所以根据以上内容编写代码:(函数模块)
ino_t get_inode(char* fname) //根据文件名,返回-i节点
void inode_to_name(ino_t inode_to_find,char* namebuf,int buflen) //找到i-节点对应的文件名,并放在字符数组里
void printpathto(ino_t this_inode)//如果不是根目录进入上级结点,并将文件夹名存入数组,否则直接打印
实验截图:
ino_t get_inode(char* fname) //根据文件名,返回-i节点
{
DIR *dir;
struct dirent *pdir;
dir = opendir(fname);
if (dir == NULL)
{
perror(".");
exit(1);
}
while((pdir = readdir(dir)) != NULL)
{
if(pdir->d_name == fname)
{
return pdir -> d_ino;
}
}
}
最后的结果显示为空:
标签:并且 har 研究 get com png ret 相同 链接
原文地址:https://www.cnblogs.com/qy20165235/p/10013113.html