Mypwd實現
阿新 • • 發佈:2018-11-22
Mypwd實現
實現要求
- 學習pwd命令
- 研究pwd實現需要的系統呼叫(man -k; grep),寫出虛擬碼
- 實現mypwd
- 測試mypwd
學習pwd命令
可知pwd是用來顯示當前/活動目錄名稱
命令格式:pwd [選項]
pwd –P:顯示當前目錄的物理路徑
pwd -L:顯示當前目錄的連線路徑
一般情況下不帶任何引數
虛擬碼
獲取當前i-Node
從根目錄中找到和i-Node相同的值
用i-Node向前遞迴
輸出路徑
實現mypwd
#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) { 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); }