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 20155216 《信息安全系统设计基础》 实现mypwd的更多相关文章

  1. 20155229 《信息安全系统设计基础》 Mypwd实现

    Mypwd 内容 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 学习pwd命令 通过man pwd查看 pwd命 ...

  2. 20155216 2017-2018-1 《信息安全系统设计基础》第二周课堂练习补交以及Myod的实现

    20155216 2017-2018-1 <信息安全系统设计基础>第二周课堂练习补交 课堂测试3:行断点的设置 运行截图: 未完成原因:课前未安装 cgdb 具体步骤: 1.输入命令:gc ...

  3. 20145213《信息安全系统设计基础》实验一 Linux开发环境的配置

    北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名: 黄亚奇 祁玮 学号:20145213 20145222 成绩: 指导教师:娄嘉鹏 实验日期:2016 ...

  4. 20145215&20145307《信息安全系统设计基础》实验二 固件设计

    20145215&20145307<信息安全系统设计基础>实验二 固件设计 实验目的与要求 了解多线程程序设计的基本原理,学习 pthread 库函数的使用. 了解在 linux ...

  5. 20145215&20145307《信息安全系统设计基础》实验五 网络通信

    小组成员:20145215卢肖明.20145307陈俊达 实验报告链接:信息安全系统设计基础--实验五实验报告

  6. 20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析

    20145223<信息安全系统设计基础> GDB调试汇编堆栈过程分析 分析的c语言源码 生成汇编代码--命令:gcc -g example.c -o example -m32 进入gdb调 ...

  7. 20145216 20145330 《信息安全系统设计基础》 实验五 简单嵌入式WEB 服务器实验

    20145216 20145330 <信息安全系统设计基础> 实验五 简单嵌入式WEB 服务器实验 实验报告封面 实验步骤 1.阅读理解源码 进入/arm2410cl/exp/basic/ ...

  8. 20145208《信息安全系统设计基础》实验五 简单嵌入式WEB 服务器实验

    20145208<信息安全系统设计基础>实验五 简单嵌入式WEB 服务器实验 20145208<信息安全系统设计基础>实验五 简单嵌入式WEB 服务器实验

  9. 2016-2017-1 《信息安全系统设计基础》 学生博客及Git@OSC 链接

    2016-2017-1 <信息安全系统设计基础> 学生博客及Git@OSC 链接 博客 1452 20145201李子璇 20145202马 超 20145203盖泽双 20145204张 ...

随机推荐

  1. TFS工具(tf.exe)使用与强制解除锁定签出

    在工作区 NTP01_SUNTAI 中,NTP01TFSUser 为 签出 锁定了项 $/NTP01/EIPD/EIPD.Client/Views/Courseware/EditorOne.xaml. ...

  2. Linux wget安装详解

    Wget是一个十分常用命令行下载工具,多数Linux发行版本都默认包含这个工具.如果没有安装可在 http://www.gnu.org/software/wget/wget.html下载最新版本,并使 ...

  3. Eclipse 控制台视图和服务器视图中停止Web服务器的差别

    Eclipse 控制台视图和服务器视图中停止Web服务器的差别 (1)console视图里面, "红色方形图标" 是terminate, 也会关闭web服务器!!!!!!!!这个, ...

  4. [翻译] NSDate-TimeAgo

    NSDate-TimeAgo https://github.com/kevinlawler/NSDate-TimeAgo NSDate+TimeAgo has merged with DateTool ...

  5. python-面向过程编程

    面向过程: 核心是过程.过程指的是解决问题的步骤,设计一条流水线,机械式的思维方式. 优点:复杂的问题流程化,进而简单化

  6. November 20th 2016 Week 47th Sunday

    Learn from yesterday, live for today, look to tomorrow. 学习昨天,活在今天,展望明天. There is always room at the ...

  7. 关于移动端APP开发-字体样式变大问题

    前两天在写App项目的时候发现一个问题,就是明明css写的样式是14px,刚开始在页面显示时并未出现问题,可是内容一多,字体突然变大了. what?,不明所以,在各大网站上找了好久才知道是浏览器的字体 ...

  8. ubuntu修改用户环境变量解决音乐播放器Rhythmbox乱码问题

    先打开主文件夹 cd /home/user #user是你的用户名 然后编辑用户环境 sudo gedit .profile在打开的文件中添加: export GST_ID3_TAG_ENCODING ...

  9. ubuntu下以16进制形式查看class文件、反编译class文件

    参考:https://blog.csdn.net/xyh930929/article/details/83860464 1.vim HelloWorld.class 2.输入英文状态下的冒号:,然后输 ...

  10. swift的enum模式—对Alamofire入口的解析--数据结构与操作结合的模式

    swift的枚举模式是数据结构与操作结合的模式 1.enum本质是一个类型,可以定义变量: 它定义的变量可以用到其它变量用的的任何地方:函数的输入.输出.成员变量.临时变量等: 这个变量还可以带有附加 ...