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. Webservice和EJB

    WebService Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯 ...

  2. elipse安装php

    在用eclipse作为PHP的开发IDE工具时,如果下载的Eclipse不带有PHP功能,则需要我们自己来给Eclipse升级.不过也可以下载eclipseForPHP 在Eclipse的help菜单 ...

  3. 2.CSS使用基础(1)

    目录 一.css颜色的四种表示法 二.使用css 4种方式 三.css注释: 四.CSS Id 和 Class选择器 五.多重样式优先级顺序 六.CSS Backgrounds(背景) 七.CSS T ...

  4. PowerShell小技巧 算术表达式求值

    前几天要统计一个组虚拟机使用的硬盘容量,只希望得到一个大概的值,计算的值截图如下: 写成算术表达式的话大概是:60 * 3 + 80 * 2 + 90 * 3 + 120 * 6 + 140 * 2 ...

  5. SSL Certificates深入理解

    http://www.littlewhitedog.com/content-71.html https://www.verisign.com/en_US/website-presence/websit ...

  6. Oracle常见等待事件

    1Buffer busy waits从本质上讲,这个等待事件的产生仅说明了一个会话在等待一个Buffer(数据块),但是导致这个现象的原因却有很多种.常见的两种是: ·         当一个会话视图 ...

  7. java多线程读取、操作List集合

    import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.ArrayUtils;   pub ...

  8. ORA-28547:(Navicat Premium连接oracle报错)

    1.背景 Navicat Premium连接oracle报 ORA-28547:connection to server failed, probable Oracle Net admin errro ...

  9. Mysql源码安装shell脚本

    #!/bin/bash#date:2019/1/20#by author zhangjia#install mysql#shell_name:mysql_auto_install.sh######## ...

  10. 《C++ Primer Plus》读书笔记之七—内存模型和名称空间

    第九章 内存模型和名称空间 1.不要将函数定义或者变量声明放到头文件中. 2.头文件常包含的内容:函数原型.使用#define或者const定义的常量.结构声明.类声明.模板声明.内联函数. 3.避免 ...