实现mypwd

Posted orii

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现mypwd相关的知识,希望对你有一定的参考价值。

实现mypwd

内容要求

  • 学习pwd命令

  • 研究pwd实现需要的系统调用(man -k; grep),写出伪代码

  • 实现mypwd

  • 测试mypwd

pwd学习过程

  • 使用 man -k pwd 查看使用说明,其简要介绍为 pwd (1) - print name of current/working directory,即为打印正在工作或最近的文件夹名
    技术图片

  • 试输入命令 pwd
    技术图片

  • 使用 man 1 pwd 查看具体使用方法
    技术图片

  • 参数学习

    • pwd [-L] 如果 PWD 环境变量包含了不包含文件名 .(点)或 ..(点点)的当前目录的绝对路径名,则显示 PWD 环境变量的值。否则,-L 标志与 -P 标志一样运行。
      技术图片

    • pwd [-p]显示当前目录的绝对路径名。与 -P 标志一起显示的绝对路径不包含在路径名的绝对路径中涉及到符号链接类型的文件的名称。
      技术图片

研究pwd实现需要的系统调用(man -k; grep),写出伪代码

  • 使用 man -k pwd 未发现任何系统调用

  • 使用 man -k current directory | grep 2 以pwd的相关描述作为关键词进行查找,并筛选系统调用,查找到一个系统调用命令 getcwdreaddir 都很符合要求
    技术图片

  • 使用 man -2 getcwd命令查看具体使用方法
    技术图片

    • 头文件及函数,其中getcwd()会将当前的工作目录绝对路径复制到参数buf所指的内存空间,参数size 为buf 的空间大小。
    #include <unistd.h>
    char *getcwd(char *buf, size_t size);
    • getcwd伪代码
    char *buf;
    getcwd(buf,sizeof(buf));
    prin(buf);
  • 使用 man -2 readdir命令查看具体使用方法
    技术图片

  • 根据文档提示,使用 man 3 readdir查看
    技术图片

    • 头文件及函数
    #include <direct.h>
    struct dirent *readdir(DIR *dirp);
    • 其中,dirent的结构体如下
     struct dirent {
                 ino_t          d_ino;       /* inode number */
                 off_t          d_off;       /* not an offset; see NOTES */
                 unsigned short d_reclen;    /* length of this record */
                 unsigned char  d_type;      /* type of file; not supported
                                                by all filesystem types */
                 char           d_name[256]; /* filename */
             };

实现pwd

     
    #include "stdio.h"
    #include "unistd.h"
    int main(void)
    {
        char buf[256];
        getcwd(buf,sizeof(buf));
        printf("当前路径为:%s
",buf);
        return 0;
    } 

测试pwd

技术图片

以上是关于实现mypwd的主要内容,如果未能解决你的问题,请参考以下文章

实现mypwd

实现mypwd

实现mypwd

20155227 实现mypwd

实现mypwd

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