实现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)路径。
伪代码
- 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
来源:https://www.cnblogs.com/fixedl/p/7841095.html