본문 바로가기

IT

pwd2.c

#include <stdio.h>

#include <sys/stat.h>

#include <sys/types.h>

#include <dirent.h>


ino_t get_inode(char *);

void print_path_to(ino_t);

void inum_to_name(ino_t, char*, int);

int count = 0;

char pathname[16][64];


int main()

{

print_path_to( get_inode(".") );

putchar('\n');

return 0;

}


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;

}


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);

}


while ( (direntp = readdir(dir_ptr) ) != NULL)

if (direntp->d_ino == inode_to_find)

{


strcpy(pathname[count], direntp->d_name);

closedir(dir_ptr);

count ++;

return;

}


fprintf(stderr,"errrrrrrr inum %d\n", inode_to_find);

exit(1);

}


void print_path_to(ino_t this_inode)

{

char its_name[BUFSIZ];

int check = 1 , i = 0;


while (check)

{

if( get_inode("..") != this_inode )

{

chdir("..");

inum_to_name(this_inode, its_name, BUFSIZ);

this_inode = get_inode(".");


}


else

check = 0;

}


for (i = count-1 ; i >= 0; i--)

{

printf("/%s", pathname[i]);

}

}

'IT' 카테고리의 다른 글

rm1.c  (0) 2014.10.01
mkdir1.c  (0) 2014.10.01
pwd1.c  (0) 2014.10.01
ls1.c  (0) 2014.09.24
ls2.c  (0) 2014.09.24