20175330 2019-12-12 实现mypwd(选做,加分)
学习pwd命令
通过man命令查看pwd命令的功能
- 由图可知pwd命令的用途是显示工作目录的路径名称。pwd 命令将当前目录的全路径名称(从根目录)写入标准输出。全部目录使用 /(斜线)分隔。第一个 / 表示根目录,最后一个目录是当前目录。
pwd [-L]
如果 PWD 环境变量包含了不包含文件名 .(点)或 ..(点点)的当前目录的绝对路径名,则显示 PWD 环境变量的值。否则,-L 标志与 -P 标志一样运行。pwd [-p]
显示当前目录的绝对路径名。与 -P 标志一起显示的绝对路径不包含在路径名的绝对路径中涉及到符号链接类型的文件的名称。
研究pwd实现需要的系统调用(man -k; grep),写出伪代码
由图可知,getcwd
具备这个功能
getcwd
:通过查看帮助文档,可以知道该函数用途:取得当前的工作目录,头文件为#include <unistd.h>
,使用方法:char *getcwd(char *buf, size_t size);
,getcwd()
会将当前的工作目录绝对路径复制到参数buf 所指的内存空间,参数size 为buf 的空间大小。
readdir
伪代码:
while(1) { 通过文件名“.”获取当前目录的i节点; 通过文件名“..”获取当前目录的父级目录的i节点; 判断当前目录和上级目录的inode-number是否一样; if(两个节点一样,则说明到达根目录 ) 跳出循环; else 切换至父级目录,获取inode-number,在父级目录中搜索对应的文件名并记录下来; 搜索文件名并存入文件名到数组中; } 输出文件名;
实现mypwd
通过getcwd
实现:
#include "stdio.h" #include "unistd.h" int main(void) { char buf[256]; getcwd(buf,sizeof(buf)); printf("当前路径为:%s\n",buf); return 0; }