linux命令实现:pwd

来源:互联网 发布:360软件检测中心 编辑:程序博客网 时间:2024/04/28 01:58

pwd命令:显示当前的工作目录。


这个命令实现起来很简单,分分钟就写好了。这里主要注意一点,chdir()这个系统调用,是改变当前程序的工作目录,不是改变bash的工作目录,这是不一样的。还有,改动是立即生效的,在需要用到工作目录(其实就是一个路径名)的时候,程序就会读取某个地方的信息,当调用chdir()时,直接把这个信息更改,后续的读取到的工作目录就会改变,在本程序中,输出的时候用到了递归,一定要注意,不要骐骥着递归回溯到函数的时候,工作目录就会转变为当时这个函数时的工作目录,工作目录当时就变了,以后也是变的,回溯时的工作目录早就不是了,这个要注意。


附上代码:

#include<stdio.h>#include<sys/stat.h>#include<dirent.h>#include<stdlib.h>#include<string.h>#include<sys/types.h>void printpath();char *inode_to_name(int);int getinode(char *);int main(){printpath();putchar('\n');return ;}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 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);}


0 0
原创粉丝点击