实现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的相关描述作为关键词进行查找,并筛选系统调用,查找到一个系统调用命令getcwd
和readdir
都很符合要求
使用
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的主要内容,如果未能解决你的问题,请参考以下文章