2017-2018-1 20155216 《信息安全系统设计基础》 实现mypwd

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命令

时间: 2024-11-13 05:03:33

2017-2018-1 20155216 《信息安全系统设计基础》 实现mypwd的相关文章

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

Mypwd 内容 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 学习pwd命令 通过man pwd查看 pwd命令来查看"当前工作目录"的完整路径. 每当在终端进行操作时,都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置. 实例1:用 pwd 命令查看默认工作目录的完整路径 实例2:/bin/pwd -L 目录连接链接时,输出连接路径 -P 输出物理

2017-2018-1 20155216 《信息安全系统设计基础》第九周学习总结

2017-2018-1 20155216 <信息安全系统设计基础>第八周学习总结 教材学习内容总结 一.常见的储存技术(RAM.ROM.磁盘.固态硬盘等) 层次结构: 存储器系统是一个具有不同容量.成本和访问时间的存储设备的层次结构. 存储器层次结构(图示): 存储器层次结构(文字描述): 从①到⑦:更大.更慢和每字节成本更低的存储设备. ①寄存器:CPU寄存器保存着从高速缓存存储器取出的字 ②L1高速缓存(SRAM):L1高速缓存保存着从L2高速缓存取出的缓存行 ③L2高速缓存(SRAM):

2017-2018-1 20155216 《信息安全系统设计基础》第十一周学习总结

2017-2018-1 20155216 <信息安全系统设计基础>第十一周学习总结 教材学习内容总结 一.虚拟存储器的概念和作用 为解决内存小而作业大.作业多的矛盾, 以及执行过程中只是把当前运行需要的那部分程序和数据装入内存. 所以,操作系统把各级存储器统一管理起来.就是说, 应该把一个程序当前正在使用的部分放在内存, 而其余部分放在磁盘上,启动执行它.操作系统根据程序执行时的要求和内存的实际使用情况, 随机地对每个程序进行换入/换出. 这样, 就给用户提供一个比正式的内存空间大的多的地址空

2017-2018-1 20155216 《信息安全系统设计基础》第十四周学习总结

2017-2018-1 20155216 <信息安全系统设计基础>第十四周学习总结 第三章:程序的机器级表示 教材学习内容总结 历史观点 Intel处理器系列俗称x86,开始时是第一代单芯片.16位微处理器之一. 每个后继处理器的设计都是后向兼容的--较早版本上编译的代码可以在较新的处理器上运行. X86 寻址方式经历三代: 1 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全 2 8086的分段模式 3 IA32的带保护模式的平坦模式 c语言代码.汇编代码.机器代码之间的关系 1.C

2017-2018-1 20155216 《信息安全系统设计基础》课程总结

2017-2018-1 20155216 <信息安全系统设计基础>课程总结 (按顺序)每周作业链接汇总 第一周作业: 简要内容: 计算机的组成:处理器读取并解释存放主存里的二进制指令:操作系统内核是应用程序和硬件之间的媒介:网络提供了计算机系统之间通信的手段. 二维码: 第二周作业: 简要内容: 行断点的设置 行断点的设置.静态库.共享库.myod的实现. 二维码: 第三周作业: 简要内容: 信息储存.整数表示.整数运算.浮点数的学习. 二维码: 第三周作业: 简要内容: 信息储存.整数表示.

20145336张子扬 《信息安全系统设计基础》第7周学习总结

20145336张子扬 <信息安全系统设计基础>第1周学习总结 教材学习内容总结 学习目标: 了解常见的存储技术(RAM.ROM.磁盘.固态硬盘等) 理解局部性原理 理解缓存思想 理解局部性原理和缓存思想在存储层次结构中的应用 高速缓存的原理和应用 三种常见存储技术:RAM.ROM和磁盘 随机访问存储器RAM分为静态RAM(SRAM)和动态RAM(DRAM) SRAM 用来作为高速缓存储存器,SRAM将每个位存储在一个双稳态的存储器单元里,每个单元是用一个六晶体管电路来实现的.它可以无限制地保

20145317《信息安全系统设计基础》第六周学习总结(1)

20145317<信息安全系统设计基础>第六周学习总结(1) 第四章 处理器体系结构 指令体系结构:一个处理器支持的指令和指令的字节级编码 4.1Y86指令集体系结构 Y86:包括定义各种状态元素.指令集和它们的编码.一组编程规范和异常事件处理. Y86程序中的每条指令都会读取或修改处理器状态的某些部分.Y86具体包括:8个程序寄存器.3个条件码ZF\SF\OF.程序计数器(PC) Y86用虚拟地址引用存储器位置. 程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态. 注意:条件

20145239 《信息安全系统设计基础》第5周学习总结

20145239<信息安全系统设计基础>第5周学习总结 教材学习内容 x86寻址方式 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全 8086的分段模式 IA32的带保护模式的平坦模式 机器级编程的两种抽象 -ISA(Instruction set architecture).ISA简单来说就是指令集体系结构.定义了处理机状态,指令格式以及指令对状态的影响.-机器级使用的存储器地址是虚拟地址. 机器代码中的处理机状态 程序计数器(PC)表示将要执行的下一条指令在存储器中的地址. 整数

20145216史婧瑶《信息安全系统设计基础》第3周学习总结

20145216史婧瑶<信息安全系统设计基础>第3周学习总结 教材学习内容总结 十六进制表示法C表示法以0x或0X开头的数字常量为十六进制进制转换常用进制:二进制(B),十进制(D),八进制(O或者Q),十六进制(H) 转换为二进制-十六进制相互转换,二进制的四位数字对应十六进制的一位数字. 同理,二进制与八进制的转化是三位对应一位. 但是通常情况下,进制转换都以二进制为桥梁进行转换. 对于一个字长为w位的机器来说,虚拟地址的范围是0~2^w-1.程序最多访问2的w次方个字节. 数据大小: 在