实现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\n",buf);
        return 0;
    } 

测试pwd

posted @ 2019-12-14 17:54  侯颖175205  阅读(120)  评论(0编辑  收藏  举报