实现mypwd

实现mypwd

要求:

1 学习pwd命令

2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码

3 实现mypwd

4 测试mypwd

学习pwd命令

  • 首先是用man命令学习pwd。

  • 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置。

1.命令格式:

pwd [选项]

显示当前目录的物理路径: pwd –P

显示当前目录的连接路径:pwd -L

2.命令功能:

查看”当前工作目录“的完整路径

3.常用参数:

一般情况下不带任何参数

如果目录是链接时:

格式:pwd -P 显示出实际路径,而非使用连接(link)路径。

linux系统下pwd命令用法详解

伪代码

  • 1.获取当前i-Node
  • 2.从根目录中找到和i-Node相同的值
  • 3.用i-Node向前递归
  • 4.输出路径

实现mypwd

include<stdio.h>

include<sys/stat.h>

include<dirent.h>

include<stdlib.h>

include<string.h>

include<sys/types.h>

void printpath();
char *inode_to_name(int);
int getinode(char *);
int main()
{
printpath();
putchar('\n');
return ;
}
void printpath()
{
int inode,up_inode;
char *str;
inode = getinode(".");
up_inode = getinode("..");
chdir("..");
str = inode_to_name(inode);
if(inode == up_inode) {
return;
}
printpath();
printf("/%s",str);
}
int getinode(char *str)
{
struct stat st;
if(stat(str,&st) == -1){
perror(str);
exit(-1);
}
return st.st_ino;
}
char *inode_to_name(int inode)
{
char *str;
DIR *dirp;
struct dirent *dirt;
if((dirp = opendir(".")) == NULL){
perror(".");
exit(-1);
}
while((dirt = readdir(dirp)) != NULL)
{
if(dirt->d_ino == inode){
str = (char )malloc(strlen(dirt->d_name)sizeof(char));
strcpy(str,dirt->d_name);
return str;
}
}
perror(".");
exit(-1);
}

测试mypwd

posted @ 2017-11-15 21:33  刘威良  阅读(240)  评论(0)    收藏  举报