实验要求
学习pwd命令 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 实现mypwd 测试mypwd
了解pwd命令
pwd是"Print Working Directory"的缩写,它的功能是显示当前工作目录的绝对路径。用于在用户不确定当前所在位置的时候,通过pwd命令来查看当前目录的绝对路径。
利用man -k key学习pwd命令
先在终端中输入man -k pwd
然后根据上面的提示,输入man pwd 1
参数:
-L:(logical)显示当前的路径,有连接文件时,直接显示连接文件的路径,(不加参数时默认此方式)
-p:(physical)显示当前的路径(物理路径),有连接文件时,不使用连接路径,直接显示连接文件所指向的文件
如何实现pwd
代码运行结果
代码
// // main.c // pwd // // Created by shadow on 2019/12/11. // Copyright © 2019 shadow. All rights reserved. // #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/stat.h> #include<sys/types.h> #include<dirent.h> #define SIZE 128 ino_t get_inode(char *dirname); void get_work_dir(ino_t inode_num); void inode_to_dirname(ino_t inode_num, char *buf, int buflen); int main(void) { get_work_dir(get_inode(".")); printf("\n"); return 0; } ino_t get_inode(char *dirname) { struct stat info; if (stat(dirname, &info) == -1) { perror("dirname"); exit(1); } return info.st_ino; } void get_work_dir(ino_t inode_num) { ino_t parent_inode; char buf[SIZE]; if (get_inode("..") != inode_num) { chdir(".."); inode_to_dirname(inode_num, buf, SIZE); parent_inode = get_inode("."); get_work_dir(parent_inode); printf("/%s", buf); } } void inode_to_dirname(ino_t inode_num, char *buf,int buflen) { DIR *dir_ptr; struct dirent *dire; if ((dir_ptr = opendir(".")) == NULL) { perror("."); exit(1); } while ((dire = readdir(dir_ptr)) != NULL) { if (dire->d_ino == inode_num) { strncpy(buf, dire->d_name, buflen); buf[strlen(buf)] = '\0'; closedir(dir_ptr); return ; } } fprintf(stderr, "error looking for inode number %d\n", (int)inode_num); exit(1); }
来源:https://www.cnblogs.com/20175201zc/p/12020275.html