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. SQLSERVER:PREEMPTIVE_OS_GETPROCADDRESS等待类型的困惑

    SQLSERVER:PREEMPTIVE_OS_GETPROCADDRESS等待类型的困惑 翻译自:http://troubleshootingsql.com/2011/07/20/preemptiv ...

  2. Mysql性能监控项及sql语句

    推荐一款mysql监控软件MONyog 1.查询缓存: mysql> show variables like '%query_cache%'; 2.缓存在Cache中线程数量thread_cac ...

  3. Jmeter入门--性能测试实战

    测试需求:测试20个用户访问https://www.baidu.com在负载达到30QPS时的平均响应时间. QPS:QueryperSecond,每秒查询率.一台查询服务器每秒能够处理的查询次数.在 ...

  4. iOS设计模式 - 代理

    iOS设计模式 - 代理 原理图 说明 1. 代理模式大家都用过,但用抽象基类NSProxy实现代理估计鲜有人用 2. 本人用NSProxy实现了代理模式,对于理解消息转发机制有点帮助 源码 http ...

  5. [转] iOS 动画库 Pop 和 Canvas 各自的优势和劣势是什么?

    iOS 动画库 Pop 和 Canvas 各自的优势和劣势是什么? http://www.zhihu.com/question/23654895/answer/25541037 拿 Canvas 来和 ...

  6. c# Windows Service 桌面上显示UI

    介绍 本文的目的是说明如何从Windows Vista中的服务正确启动交互式进程,以及演示如何以完全管理员权限启动该进程.交互式过程是能够在桌面上显示UI的过程. 本文介绍如何创建一个名为Loader ...

  7. 逆向分析-IDA动态调试WanaCrypt0r的wcry.exe程序

    0x00 前言 2017年5月12日全球爆发大规模蠕虫勒索软件WanaCrypt0r感染事件,各大厂商对该软件做了深入分析,但针对初学者的分析教程还比较少,复现过程需要解决的问题有很多,而且没有文章具 ...

  8. SC review 5.2 设计可复用软件

    行为子类型与Liskov替换原则 Java 中编译器执行的规则(静态类型检查): • 子类型可以增加方法,但不可删 • 子类型需要实现抽象类型中的所有未实现方法 • 子类型中重写的方法必须有相同或子类 ...

  9. 学习python第四天——Oracle分组

    1.分组的概念: 关键字:group by子句 结论:在select列表中如果出现了聚合函数,不是聚合函数的列,必须都要定义到group by子句的后面 需求: 查询公司各个部门的平均工资? sele ...

  10. [USACO08JAN]Running

    嘟嘟嘟 这很显然是一道dp题. 令dp[i][j]表示第 i 分钟末,疲劳度为 j 是的最大跑步距离,则 dp[i][0] = max(dp[i - 1][0], max(dp[i - j][j])) ...