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

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

  • Linux pwd命令用于显示工作目录。
  • 执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称。
  • pwd命令以绝对路径的方式显示用户当前工作目录。命令将当前目录的全路径名称(从根目录)写入标准输出。全部目录使用/分隔。第一个/表示根目录,最后一个目录是当前目录。执行pwd命令可立刻得知您目前所在的工作目录的绝对路径名称。
  • pwd 命令查看默认工作目录的完整路径
[[email protected] ~]# pwd
/root
[[email protected] ~]#
  • pwd 命令查看指定文件夹问题2解决方案:
[[email protected] ~]# cd /opt/soft/
[[email protected] soft]# pwd
/opt/soft
[[email protected] soft]#

实现代码:

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <unistd.h>  

    #define MAX_DIR_DEPTH (256)  //限制最大的目录深度
    #define TRUE 1
    #define FALSE 0  

    //根据文件名获取文件的inode-number
    ino_t get_ino_byname(char *filename)
    {
        struct stat file_stat;
        if(0 != stat(filename, &file_stat)) //stat()通过文件名filename获取文件信息,并保存在buf所指的结构体stat中
        {
            perror("stat");
            exit(-1);
        }  

        return file_stat.st_ino;
    }  

    //根据inode-number, 在当前目录中查找对呀的文件名
    char *find_name_byino(ino_t ino)
    {
        DIR *dp = NULL;
        struct dirent *dptr = NULL;
        char *filename = NULL;  

        if(NULL == (dp = opendir("."))) //opendir()打开一个目录,在失败的时候返回一个空的指针,成返回DIR结构体
        {
            fprintf(stderr, "Can not open Current Directory\n");
            exit(-1);
        }
        else
        {
            while(NULL != (dptr = readdir(dp))) //readdir()用来读取目录。返回是dirent结构体指针
            {
                if(dptr->d_ino == ino)
                {
                    filename = strdup(dptr->d_name); //strdup()将串拷贝到新建的位置处,返回一个指针,指向为复制字符串分配的空间;如果分配空间失败,则返回NULL值.
                    break;
                }
            }  

            closedir(dp);
        }  

        return filename;
    }  

    int main(int argc, char *argv[])
    {
        //记录目名的栈
        char *dir_stack[MAX_DIR_DEPTH];
        unsigned current_depth = 0;  

        while(TRUE)
        {
            ino_t current_ino = get_ino_byname("."); //通过特殊的文件名"."获取当期目录的inode-number  

            ino_t parent_ino = get_ino_byname(".."); //通过特殊的文件名".."获取当前目录的父目录的inode-number  

            if(current_ino == parent_ino)
                break;               //达到根目录,推出循环  

            /*两个inode-number不一样*/
            chdir(".."); //更改当前工作目录,变为当前目录的父目录
            dir_stack[current_depth++] = find_name_byino(current_ino); //"文件名"地址存放  

            if(current_depth >= MAX_DIR_DEPTH) //路径名太深
            {
                fprintf(stderr, "Directory tree is too deep.\n");
                exit(-1);
            }
        }  

        int i = current_depth - 1;
        for(i = current_depth - 1; i >= 0; i--) //打印路径
        {
            fprintf(stdout, "/%s", dir_stack[i]);
        }
        fprintf(stdout, "%s\n", current_depth == 0 ? "/" : "");  

        return 0;
    }  

截图:

时间: 2024-11-04 17:02:20

2017-2018-1 20155231 《信息安全系统设计基础》实现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 20155231 《信息安全系统设计基础》第9周学习总结

2017-2018-1 20155231 <信息安全系统设计基础>第9周学习总结 教材学习内容总结 第六章 存储器层次结构 第一节 存储技术 所谓"随机存取",指的是当存储器中的数据被读取或写入时,所需要的时间与这段信息所在的位置或所写入的位置无关.相对的,读取或写入顺序访问(Sequential Access)存储设备中的信息时,其所需要的时间与位置就会有关系.它主要用来存放操作系统.各种应用程序.数据等 当电源关闭时RAM不能保留数据.如果需要保存数据,就必须把它们写入

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次方个字节. 数据大小: 在

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

20145336张子扬 <信息安全系统设计基础>第3周学习总结 教材学习内容总结 p24 在参考p30页的代码,添加main函数测试 p35页  练习2.11 进行gdb单步跟踪测试 p44页 p47和p49页的代码 49 在敲这个代码时,忘记定义了一个函数,这需要运用到28页的代码,再修改之后代码可以继续运行 使用gdb跟踪测试 p78 教材学习中的问题和解决过程 为啥我的虚拟机每次下载的东西在重启之后都没了啊 中午下载perl,在重启虚拟机之后机不见了 课后作业中的问题和解决过程 2.56

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

20145216 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 Linux基础 1.ls命令 ls或ls .显示是当前目录的内容,这里“.”就是参数,表示当前目录,是缺省的可以省略.我们可以用ls -a .显示当前目录中的所有内容,包括隐藏文件和目录.其中“-a” 就是选项,改变了显示的内容.如图所示: 2.man命令 man命令可以查看帮助文档,如 man man : 若在shell中输入 man+数字+命令/函数 即可以查到相关的命令和函数:若不加数字,那man命令默认从数字较

信息安全系统设计基础实验五 20135210&amp;20135218

北京电子科技学院(BESTI) 实     验    报     告 课程:信息安全系统设计基础           班级: 1352 姓名:程涵,姬梦馨             学号:20135210  20135218 成绩:           指导教师:娄佳鹏 实验日期:2015.11.17 实验密级:        预习程度:         实验时间:15:30-18:00 仪器组次:          必修/选修:必修     实验序号:5 实验名称: 简单嵌入式WEB服务器实验