随手写个pwd命令

首先声明,这是《Unix/Linux编程实践教程》书上第4章的一个例子,用以说明chdir命令的使用,以及相关的文件系统内容。网上关于这个代码例子的网页(写在博客上的,百度知道什么的)很多。

根据书上给的思路,写了个和书上代码差不多的。

#include<stdio.h>
#include
<string.h> #include<unistd.h> #include<fcntl.h> #include<sys/stat.h> #include<dirent.h> #include<stdlib.h> #include<errno.h> #define MAX_SIZE 256 void do_pwd(char*); int get_inode(char *path) { struct stat info; int inode; if(stat(path,&info)==-1){ perror("get inode error"); exit(errno); } inode = info.st_ino; return inode; } void get_name_inode(char name[], int inode) { DIR *dir_ptr; struct dirent *ptr; if((dir_ptr = opendir("."))==NULL){ perror("dir open error"); exit(errno); } while((ptr = readdir(dir_ptr))!=NULL){ if(ptr->d_ino==inode){ strcpy(name,ptr->d_name); break; } } closedir(dir_ptr); return; } int main(int argc, char *argv[]) { do_pwd("."); printf("\n"); return 0; } void do_pwd(char *path) { int flag=0; char name[MAX_SIZE]; int inode=get_inode(path); if(inode!=get_inode("..")){ chdir(".."); get_name_inode(name,inode); do_pwd("."); printf("/%s",name); }return; }

因为用的是书上的思路,书上例子有的问题,这段代码也一样有。具体就是,当系统不是挂载在一个分区的时候,这个程序只能显示到当前分区的根部,即挂载点,而不能继续向上访问另外分区的目录。举例来说,在我的系统中,/分区和/home分区挂载在不同的硬盘分区上,那么这个程序就只能显示到username这一级而不能显示/home。

然后,就想去找gnu的pwd命令实现。根据pwd命令的man手册,pwd命令在coreutils包中。去网站上下了个包,看pwd.c的源码,有300多行,编译了用gdb单步跟了一下,发现代码逻辑主要就几行。最主要的就是调用xgetcwd函数。这个函数在源码文件的lib目录中的xgetcwd.h中声明,定义在相应的.c文件中,就几行,调用了一下getcwd函数,然后返回。

于是,一个功能可用的简单pwd就像下面这样:

#include<stdio.h>
#include<unistd.h>

int main(int argc, char *argv[])
{
     printf("%s\n",getcwd(NULL, 0));
     return 0;
}

编译、运行。显示正确。

转载于:https://www.cnblogs.com/fityme/archive/2013/04/28/3050068.html

### 关于 `pwd` 命令的使用方法 `pwd` 是 Linux 和类 Unix 系统中的一个重要命令,用于打印当前工作目录的绝对路径。其全称为 **Print Working Directory**。 #### 功能描述 通过执行 `pwd` 命令,可以获取当前所在的工作目录位置。此命令通常作为 Shell 的内置功能存在,因此具有较高的执行效率[^1]。 #### 执行示例 在终端中运行以下命令即可查看当前工作目录: ```bash pwd ``` 如果一切正常,系统会返回类似于 `/home/user` 或其他路径的结果。例如,在 Cygwin 环境下可能输出如下内容: ```bash Administrator@2013-0329-1017 ~ $ pwd /cygdrive/c/Users/Administrator ``` 这表明用户的当前工作目录位于 Windows 文件系统的 C:\Users\Administrator 路径下[^2]。 #### 参数说明 为了更灵活地控制输出行为,`pwd` 提供了一些额外选项: - `-L`, `--logical`: 输出逻辑路径(默认)。当涉及符号链接时,显示的是符号链接本身的路径而非目标路径。 ```bash pwd -L ``` - `-P`, `--physical`: 输出物理路径。忽略任何中间存在的符号链接,仅展示真实的文件系统结构。 ```bash pwd -P ``` 这些参数允许用户根据具体场景选择合适的路径表示方式[^3]。 #### 可能的问题及解决办法 假如你在尝试调用 `pwd` 时收到错误提示 `"bash: pwd: command not found"` ,则需确认 `$PATH` 是否配置正确或者直接利用完整路径来启动程序,比如 `/bin/pwd` 。一般而言,常规安装环境下不会发生此类状况。 以下是简单的脚本实例演示如何结合 make 工具自动构建项目并验证当前目录信息: ```makefile all: @echo "Current directory:" pwd ``` 保存以上内容至名为 Makefile 的文档里之后,可通过下面指令触发操作: ```bash [user@localhost ~]$ make Current directory: /home/user ``` ### 结论 综上所述,掌握好基础语法以及特殊标志位的应用对于日常开发维护至关重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值