20155212 C语言实现linux下pwd命令的两种方法
2017-11-19 21:27
1276 查看
20155212 C语言实现linux下pwd命令的两种方法
学习pwd命令
通过man pwd命令查看
pwd [OPTION],一般不加参数
-P显示当前目录的物理路径
-L显示当前目录的连接路径
该命令用来显示目前所在的工作目录。指令英文原义:print work directory
系统调用
使用man -k dir | grep 2命令查看有哪些跟pwd相关的系统调用
这里有两个系统调用可能用到pwd中
getcwd()
功能:获取当前目录
参数
char *buf:存储当前路径的字符串
size_t size:buf的空间大小
返回值: 成功则返回指向当前路径字符串的指针,错误则返回NULL
readdir()
功能:readdir()返回参数dir目录流的下个目录进入点
参数:DIR * dir。结构dirent定义如下:
struct dirent{ ino_t d_ino;//此目录进入点的inode off_t d_off;//目录文件开头至此目录进入点的位移 unsigned short int d_reclen;//记录的长度 unsigned char d_type;//文件类型 char d_name[256]; };
返回值:成功则返回下个目录进入点。有错误发生或读取到目录文件尾则返回NULL
但是发现readdir()不能单独使用,
opendir()
功能:opendir()用来打开参数name指定的目录,并返回DIR*形态的目录流,和open()类似,接下来对目录的读取和搜索都要使用此返回值
参数:路径名
返回值:成功则返回DIR* 型态的目录流,打开失败则返回NULL。
chdir()
功能:切换当前目录
参数:路径名
伪代码
使用getcwd()定义数组buf[MAXPATH]; 调用getcwd(buf, MAXPATH); 输出返回值;
使用readdir()
while(1) { 读取"."和".."的信息 if("."的inode==".."的inode) { 退出; } else { chdir(".."); while(dirent->inode!=前面"."的inode) { dirent=readdir(); } dirent->name入栈; } } for 栈顶->栈底 print 栈顶信息
产品代码
使用getcwd()#include <stdio.h> #include <unistd.h> #define MAXPATH 50 int main() { char path[MAXPATH]; puts(getcwd(path, MAXPATH)); return 0; }
使用readdir()
#include <stdio.h> #include <dirent.h> #include <unistd.h> #include <sys/types.h> #include <string.h> int main() { DIR *dirptr=NULL; struct dirent *current_dirent=NULL, *parent_dirent=NULL, *tmp_dirent=NULL; int count=0; ino_t current_inode; char path[256][256]; while(1) { dirptr=opendir("."); do { current_dirent=readdir(dirptr); }while(strcmp(current_dirent->d_name, ".")!=0); current_inode=current_dirent->d_ino; closedir(dirptr); dirptr=opendir("."); do { parent_dirent=readdir(dirptr); }while(strcmp(parent_dirent->d_name, "..")!=0); closedir(dirptr); if(((long)parent_dirent->d_ino)==((long)current_dirent->d_ino)) { break; } else { chdir(".."); dirptr=opendir("."); do { tmp_dirent=readdir(dirptr); }while(tmp_dirent->d_ino!=current_inode); closedir(dirptr); count++; strcpy(path[count], tmp_dirent->d_name); } } int i; for(i=count;i>0;i--) { printf("/%s", path[i]); } printf("\n"); return 0; }
测试
实现一:使用getcwd()实现pwd实现二:使用readdir()实现pwd
码云链接
相关文章推荐
- C语言实现linux pwd命令
- 加分项——C语言实现Linux的pwd命令
- Linux平台上C语言实现异步队列的两种方法
- 20155308 加分项——C语言实现Linux的pwd命令
- C语言实现linux pwd命令
- Linux平台上C语言实现异步队列的两种方法
- 【C语言】用递归和循环两种方法实现单链表倒置
- Linux 终端命令 rm 删除的文件进入回收站实现方法
- Linux下获得系统时间的C语言的实现方法
- linux简单方法实现让普通用户执行管理员命令
- C语言实现linux下的tail -n <n> 命令
- Oracle中spool命令实现的两种方法比较
- 用C语言实现Linux命令的cat功能
- 解析如何在C语言中调用shell命令的实现方法
- Linux远程下载文件的两种方法之 ftp命令和scp命令
- Linux下获得系统时间的C语言的实现方法
- Linux下Socket连接超时的两种实现方法 setsockopt
- 实现定时开关机两种方法及shutdown命令详解
- linux下通过字符模块实现类似ps命令的查看系统进程方法
- 在linux中用C语言实现ping命令的部分功能