20155333 实现mypwd
20155333 实现mypwd
学习pwd命令
Linux中用 pwd 命令来查看”当前工作目录“的完整路径。
- 命令格式:pwd [选项]
- 命令功能:查看”当前工作目录“的完整路径
- 用参数:一般情况下不带任何参数,如果目录是链接时,格式:
pwd -P 显示出实际路径,而非使用连接(link)路径。
pwd -L:与pwd -P完全相反,显示链接路径

研究pwd实现需要的系统调用(man -k; grep),写出伪代码


实现pwd打印当前目录
- 所需函数 getcwd
- 函数原型:char *getcwd( char *buffer, int maxlen );
- 功 能:获取当前工作目录
- 参数说明:getcwd()会将当前工作目录的绝对路径复制到参数buffer所指的内存空间中,参数maxlen为buffer的空间大小。
- 返 回 值:成功则返回当前工作目录,失败返回 FALSE。
- 在某些 Unix 的变种下,如果任何父目录没有设定可读或搜索模式,即使当前目录设定了,getcwd()还是会返回 FALSE。有关模式与权限的更多信息见 chmod()。
- 头文件:unistd.h(windows下为direct.h)
#include <unistd.h>
#include <stdio.h>
int main(void){
printf("%s\n",getcwd(NULL,0)); //输出获取路径
return 0;
}

实现mypwd
mypwd.c
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<dirent.h>
//获得一个目录的inode号
//以便于配合readdir筛选
ino_t get_inode(char *);
//利用递归,由根目录向外
//依次显示各级目录
void printpathto(ino_t);
//在当前目录中
//根据inode号,寻找对应的
//文件或文件夹名称,保存在数组里
//注意:inode有对应类型ino_t,实际上还是个数。
void inum_to_name(ino_t ,char *,int);
int main()
{
//输入参数为当前目录
printpathto(get_inode("."));
putchar('n');
return 0;
}
void printpathto(ino_t this_inode)
{
ino_t my_inode;
char its_name[BUFSIZ];
//未到达根目录前都满足这个条件
if(get_inode("..") != this_inode)
{
//换到其上级目录
chdir("..");
//把上级目录的文件夹名存到its_name里
inum_to_name(this_inode,its_name,BUFSIZ);
//将当前目录(刚才切换的“上级目录”)
//的内容给my_inode
my_inode =get_inode(".");
//递归调用
printpathto(my_inode);
//输出文件夹名
printf("/%s",its_name);
}
}
void inum_to_name(ino_t inode_to_find,char * namebuf,int buflen)
{
//目录描述符
DIR * dir_ptr;
//保存目录信息
struct dirent *direntp;
//打开当前目录
dir_ptr = opendir(".");
if(dir_ptr == NULL){
perror(".");
exit(1);
}
//显示不停读取目录中的内容,if将每条内容加以判断
//判断inode号是否是我们需要的
//如果是,
while((direntp = readdir(dir_ptr)) != NULL)
if(direntp->d_ino == inode_to_find)
{
//将文件夹名复制到namebuf中,并添加'\0'
strncpy(namebuf, direntp->d_name,buflen);
namebuf[buflen-1] = '\0';
closedir(dir_ptr);
return;
}
//如果程序正常,在上面就return了
fprintf(stderr,"error looking for inum %dn",inode_to_find);
exit(1);
}
//怎么获得的?
//stat把文件名(目录文件)信息放到结构体
//返回结构体st_ino元素
//这里增加了一步出错处理
ino_t get_inode( char * fname)
{
struct stat info;
if(stat(fname,&info) == -1){
fprintf(stderr,"Cannot stat");
perror(fname);
exit(1);
}
return info.st_ino;
}
测试mypwd

20155333 实现mypwd的更多相关文章
- 2017-2018-1 20155205 实现mypwd
2017-2018-1 20155205 实现mypwd 课堂总结 根据上课对ls -l功能的实现,我总结了实现一个linux命令需要的步骤: 使用man -k xx | grep xx查看帮助文档, ...
- 20155227 实现mypwd
20155227 实现mypwd 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 课堂学习笔记 实现mypwd 在 ...
- 2017-2018-1 20155306 mypwd的实现
2017-2018-1 20155306 mypwd的实现 一.pwd的使用 功能: Linux中用 pwd 命令来查看"当前工作目录"的完整路径. 命令格式:pwd [选项] 命 ...
- 实现mypwd
1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 提交过程博客的链接 代码如图
- 2018-2019-1 20165231 实现mypwd(选做)
实现mypwd 要求: 学习pwd命令 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 实现mypwd 测试mypwd pwd: 在Linux层次结构中,想要知道当前所处的目录, ...
- 20165223 《信息安全系统设计基础》 实现mypwd
一.学习pwd命令 1. pwd命令简介 英文原名:Print Working Directory 指令功能:打印出当前工作目录 执行权限:All User 指令所在路径:/usr/bin/pwd 或 ...
- 2018-2019-1 20165234 实现mypwd
实现mypwd(选做,加分) 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 提交过程博客的链接
- 实现mypwd和mybash
一.pwd 1.学习pwd命令 man pwd查看pwd功能 可以得知pwd功能是打印当前目录 2.研究pwd实现需要的系统调用(man -k; grep),写出伪代码 (1)man -k direc ...
- 20155228 2017-11-19 实现mypwd(选做,加分)
20155228 2017-11-19 实现mypwd(选做,加分) 题目和要求 学习pwd命令 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 实现mypwd 测试mypwd ...
随机推荐
- 观察者模式 - Java 实现1(使用JDK内置的Observer模式)
使用JDK内置的观察者模式 1. 可观察者(主题) 被观察的主题继承 Observable 对象, 使用该对象的调用 notifyObservers() 或 notifyObservers(arg) ...
- Java设计模式----初识适配器模式
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- python_循环(迭代)
#for 和 while #for用来迭代处理,什么叫迭代?你就当没看到这个词,for是把一堆玩意做一个一个加工用的,比如吃一袋花生,得一个一个剥吧,就是这意思 a = 'abcde' #每个字母当做 ...
- linux在当前目录下根据文件名查找文件
grep -rl "python" ./ 查找./目录下文件名中包含python的文件 find | grep luoluo将当前目录下(包括子目录)的文件名中含有luoluo的文 ...
- JAVA入门之基础语言
在上一章文章中,读者已经了解了如何搭建Java 开发环境及Java 程序的开发过程.从本篇文章开始讲解Java 的基本语言.这些基本语言的语法和其他一些编程语言相比有些是类似的,但还有很多不同之处,读 ...
- 面对对象程序设计_task2_C++视频教程
lessons about C++ 1月份的事情不该留到2月份来做,这几天看了几个地方的C++视频教程,不习惯于云课堂的话多等等,最终还是选择了慕课网上面的资源,也安下心来看了一些内容,下面附上课程详 ...
- 【原创】python __all__ 的用法
1. 写自己的module或者package的时候需要控制向外暴露的名字, 这个很有用, 防止名字污染
- HBase性能优化 Java Api
1. 使用“连接池” 如果每次和Hbase交互时都去新建连接的话,显然是低效率的,HBase也提供类连接池相关的API. 1.1. HTablePool 早期的API中使用它,但很不幸,现在它已经过时 ...
- JavaScript的DOM操作获取元素实际大小
clientWidth 和 clientHeight 这组属性可以获取元素可视区的大小,可以得到元素内容及内边距所占据的空间大小. 返回了元素大小,但没有单位,默认单位是 px,如果你强行设置了单位, ...
- 常见dos命令(win7下测试)
按下组合键:win + R ,输入cmd进入Dos. 1. cls :清屏命令. 2. ver :查看系统版本号命令,winver弹出一个窗口显示更详细的系统版本号. 3. dir 无参数 : ...