实现mypwd

左心房为你撑大大i 提交于 2020-02-03 06:59:25

实现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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!