一、学习pwd
命令:
1.pwd
命令的功能:
Linux pwd
命令用于显示工作目录。
执行pwd
指令可立刻得知您目前所在的工作目录的绝对路径名称。
2.参数:
-L:--logical,显示当前的路径,有连接文件时,直接显示连接文件的路径,(不加参数时默认此方式),参考示例1。
-p:--physical,显示当前的路径,有连接文件时,不使用连接路径,直接显示连接文件所指向的文件,参考示例2。 当包含多层连接文件时,显示连接文件最终指向的文件,参考示例3。
--help:显示帮助信息。
--version:显示版本信息。
3.通过man -k pwd
命令查找;
4.通过man -k directory | grep 3
命令查找库函数;
发现readdir
,opendir
以及getcwd
。
5.通过man 3 readdir
查找相应结构体;
6.通过man 2 readlink
命令查看帮助文档;
如图可以找到例子,下面我们根据例子编写代码,来实现pwd
。
二、实现和测试pwd
:
1.实现pwd
的代码:
#include<stdio.h> #include<sys/stat.h> #include<dirent.h> #include<stdlib.h> #include<string.h> #include<sys/types.h> //获得文件的inode号 int getinode(char *str) { struct stat st; if(stat(str,&st) == -1){ perror(str); exit(-1); } return st.st_ino; } //找到对应的文件名 char *inode_to_name(int inode) { char *str; DIR *dirp; struct dirent *dirt; if((dirp = opendir(".")) == NULL){ perror("."); exit(-1); } while((dirt = readdir(dirp)) != NULL) { if(dirt->d_ino == inode){ str = (char *)malloc(strlen(dirt->d_name)*sizeof(char)); strcpy(str,dirt->d_name); return str; } } perror("."); exit(-1); } //输出路径 void printpath() { int inode,up_inode; char *str; inode = getinode("."); up_inode = getinode(".."); chdir(".."); str = inode_to_name(inode); if(inode == up_inode) { // printf("/%s",str); return; } printpath(); printf("/%s",str); } int main() { printpath(); putchar('\n'); return ; }
2.pwd
测试结果:
来源:https://www.cnblogs.com/gexvyang/p/12045848.html