标签:类型 显示 return path 情况下 nis images amp chm
Linux中用 pwd 命令来查看”当前工作目录“的完整路径。
#include <unistd.h>
#include <stdio.h>
int main(void){
printf("%s\n",getcwd(NULL,0)); //输出获取路径
return 0;
}
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<dirent.h>
//获得一个目录的inode号
//以便于配合readdir筛选
ino_t get_inode(char *);
//利用递归,由根目录向外
//依次显示各级目录
void printpathto(ino_t);
//在当前目录中
//根据inode号,寻找对应的
//文件或文件夹名称,保存在数组里
//注意:inode有对应类型ino_t,实际上还是个数。
void inum_to_name(ino_t ,char *,int);
int main()
{
//输入参数为当前目录
printpathto(get_inode("."));
putchar(‘n‘);
return 0;
}
void printpathto(ino_t this_inode)
{
ino_t my_inode;
char its_name[BUFSIZ];
//未到达根目录前都满足这个条件
if(get_inode("..") != this_inode)
{
//换到其上级目录
chdir("..");
//把上级目录的文件夹名存到its_name里
inum_to_name(this_inode,its_name,BUFSIZ);
//将当前目录(刚才切换的“上级目录”)
//的内容给my_inode
my_inode =get_inode(".");
//递归调用
printpathto(my_inode);
//输出文件夹名
printf("/%s",its_name);
}
}
void inum_to_name(ino_t inode_to_find,char * namebuf,int buflen)
{
//目录描述符
DIR * dir_ptr;
//保存目录信息
struct dirent *direntp;
//打开当前目录
dir_ptr = opendir(".");
if(dir_ptr == NULL){
perror(".");
exit(1);
}
//显示不停读取目录中的内容,if将每条内容加以判断
//判断inode号是否是我们需要的
//如果是,
while((direntp = readdir(dir_ptr)) != NULL)
if(direntp->d_ino == inode_to_find)
{
//将文件夹名复制到namebuf中,并添加‘\0‘
strncpy(namebuf, direntp->d_name,buflen);
namebuf[buflen-1] = ‘\0‘;
closedir(dir_ptr);
return;
}
//如果程序正常,在上面就return了
fprintf(stderr,"error looking for inum %dn",inode_to_find);
exit(1);
}
//怎么获得的?
//stat把文件名(目录文件)信息放到结构体
//返回结构体st_ino元素
//这里增加了一步出错处理
ino_t get_inode( char * fname)
{
struct stat info;
if(stat(fname,&info) == -1){
fprintf(stderr,"Cannot stat");
perror(fname);
exit(1);
}
return info.st_ino;
}
标签:类型 显示 return path 情况下 nis images amp chm
原文地址:http://www.cnblogs.com/rh123456/p/7868357.html