2017-2018-1 20155216 《信息安全系统设计基础》 实现mypwd
2017-11-17 19:50
351 查看
2017-2018-1 20155216 《信息安全系统设计基础》 实现mypwd
作业要求:
1、学习pwd命令2、研究pwd实现需要的系统调用(man -k; grep),写出伪代码
3、实现mypwd
4、测试mypwd
1、学习pwd命令
pwd 命令查看默认工作目录的完整路径-L 目录连接链接时,输出连接路径
-P 输出物理路径
当前目录被删除了,而pwd命令仍然显示那个目录
2、研究pwd命令
使用man -k查看系统调用
伪代码:
1、根据inode-number ,在当前目录中查找对应的文件名 2、限制最大的目录深度 3、记录目录名的栈 4、通过特殊的文件名“.”获取当前目录的inode-number 5、通过特殊的文件名“..”获取当前目录的父级目录的inode-number 6、判断当前目录和上级目录的inode-number是否一样 7、如果两个inode-number一样说明到达根目录 8、如果两个inode-number不一样 9、切换至父级目录,根据步骤1获取的inode-number,在父级目录中搜索对应的文件名并记录下来, 重新回到步骤1 10、如果路径名太深,则提示 11、输出完整路径名
3、实现pwd命令:
C语言代码:#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) { // printf("/%s",str); 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); }
4、测试pwd命令
相关文章推荐
- 2017-2018-1 20155315 《信息安全系统设计基础》加分作业:实现mypwd
- 20155326 2017-2018-1 《信息安全系统设计基础》课下加分项mypwd实现
- 2017-2018-1 20155321 《信息安全系统设计基础》课堂实践——实现mypwd
- 2017-2018-1 20155231 《信息安全系统设计基础》实现mypwd
- 2017-2018-1 20155330 《信息安全系统设计基础》加分项目--实现mypwd
- 2017-2018-1 20155220 《信息安全系统设计基础》课下实践——实现mypwd
- 2017-2018-1 20155226 《信息安全系统设计基础》课下实践——实现mypwd
- 2017-2018-1 20155317 《信息安全系统设计基础》课堂实践——实现mypwd
- 2017-2018-1 20155233 《信息安全系统设计基础》实现mypwd
- 2017-2018-1 20155310 《信息安全系统设计基础》 实现mypwd
- 2017-2018-1 20155336 《信息安全系统设计基础》加分作业:实现mypwd
- 2017-2018-1 20155210 《信息安全系统设计基础》 实现mypwd
- 2017-2018-1 20155201 《信息安全系统设计基础》 pwd命令的实现
- 2017-2018-1 20155306 《信息安全系统设计基础》Mybash的实现
- #2017-2018-1 20155327 《信息安全系统设计基础》实现mypwd
- 2017-2018-1 20155216 《信息安全系统设计基础》课程总结
- 2017-2018-1 20155216 《信息安全系统设计基础》 第十六周课上测试补交
- 2017-2018-1 20155214 《信息安全系统设计基础》 第9周课下测试-mypwd
- 2017-2018-1 20155203 20155204 《信息安全系统设计基础》实验一:开发环境的熟悉
- 2017-2018-1 20155304 《信息安全系统设计基础》第四周学习总结