2017-2018-1 20155315 《信息安全系统设计基础》加分作业:实现mypwd
学习pwd命令
- man pwd查看

- pwd命令用于显示当前工作目录,是Linux下最常用的命令之一。在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置。
- 环境变量OLDPWD表示前一次的工作目录,环境变量PWD表示当前的工作目录。
- 目录连接链接时,pwd -P 显示出实际路径,而非使用连接(link)路径;pwd显示的是连接路径
- /bin/pwd
- -L 目录连接链接时,输出连接路径
- -P 输出物理路径

研究pwd实现需要的系统调用(man -k; grep),写出伪代码
实现pwd有两种函数,一个是getcwd(),一个是多个函数嵌套。
- getcwd()即得到当前工作目录,调用这个函数,返回值就是当前目录。
- 使用系统调用函数,包括
readdir和chdir。

原始伪代码
使用循环不断进入上级目录,读取目录名
do{
readdir(".");
chdir("..");
}while(i_node("..")!=i_node("."));
但是在编写的过程中,发现先读取的是子目录,而要先显示的是父目录。一个解决办法是将所有读取到的目录存到数组中,从最后一个元素开始显示,但是觉得太麻烦了,改进了代码。
改进伪代码
pwd()
if(i_node("..")!=i_node("."))
{
chdir("..");
pwd("..");
printf();
}
使用递归函数,就可以直接从父目录开始显示了。
实现mypwd
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <string.h>
#include <unistd.h>
ino_t get_inode(char*);
void pwd(ino_t);
void name(ino_t,char*,int);
int main()
{
pwd(get_inode("."));
printf("\n");
return 0;
}
void pwd(ino_t this_inode)
{
ino_t my_inode;
char its_name[BUFSIZ];
if (get_inode("..")!=this_inode)
{
chdir("..");
name(this_inode,its_name,BUFSIZ);
my_inode = get_inode(".");
pwd(my_inode);
printf("/%s",its_name);
}
}
void name(ino_t inode,char* namebuf,int buflen) //找到i-节点对应的文件名
{
DIR* cdir;
struct dirent* direntp;
cdir = opendir(".");
while((direntp = readdir(cdir)) != NULL)
{
if(direntp->d_ino == inode)
{
strncpy(namebuf,direntp->d_name,buflen);
namebuf[buflen-1] = '\0';
closedir(cdir);
return;
}
}
printf("error looking for inode\n");
}
ino_t get_inode(char* fname) //根据文件名,返回-i节点
{
struct stat info;
stat( fname, &info);
return info.st_ino;
}
测试mypwd

2017-2018-1 20155315 《信息安全系统设计基础》加分作业:实现mypwd的更多相关文章
- 2017-2018-1 20155330 《信息安全系统设计基础》加分项目--实现mypwd
2017-2018-1 20155330 <信息安全系统设计基础>加分项目--实现mypwd pwd命令 命令功能:查看"当前工作目录"的完整路径. 通过man命令查看 ...
- 2017-2018-1 20155336 《信息安全系统设计基础》加分作业:实现mypwd
2017-2018-1 20155336 <信息安全系统设计基础>加分作业:实现mypwd 什么是PWD? 用man pwd查看: 用于打印当前工作目录的工作路径 1.命令格式:pwd[选 ...
- 2017-2018-1 20155320 《信息安全系统设计基础》第四周学习总结(课堂实践补交+myhead与mytail加分项目)
2017-2018-1 20155320 <信息安全系统设计基础>第四周学习总结(课堂实践补交+myhead与mytail实现) 课堂实践内容 1 参考教材第十章内容 2 用Linux I ...
- 20155305《信息安全系统设计基础》10月18日课堂 fork,exic,wait
20155305<信息安全系统设计基础>10月18日课堂 fork,exic,wait fork()函数 1.fork函数作用 一般来讲, 我们编写1个普通的c程序, 运行这个程序直到程序 ...
- # 20145314《信息安全系统设计基础》期中复习总结 Part B
20145314<信息安全系统设计基础>期中复习总结 Part B 学习知识点内容总结 复习线索:http://group.cnblogs.com/topic/73069.html 本周的 ...
- 20145213《信息安全系统设计基础》实验一 Linux开发环境的配置
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名: 黄亚奇 祁玮 学号:20145213 20145222 成绩: 指导教师:娄嘉鹏 实验日期:2016 ...
- 20145215&20145307《信息安全系统设计基础》实验二 固件设计
20145215&20145307<信息安全系统设计基础>实验二 固件设计 实验目的与要求 了解多线程程序设计的基本原理,学习 pthread 库函数的使用. 了解在 linux ...
- 20145215&20145307《信息安全系统设计基础》实验五 网络通信
小组成员:20145215卢肖明.20145307陈俊达 实验报告链接:信息安全系统设计基础--实验五实验报告
- 20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析
20145223<信息安全系统设计基础> GDB调试汇编堆栈过程分析 分析的c语言源码 生成汇编代码--命令:gcc -g example.c -o example -m32 进入gdb调 ...
- 20145216 20145330 《信息安全系统设计基础》 实验五 简单嵌入式WEB 服务器实验
20145216 20145330 <信息安全系统设计基础> 实验五 简单嵌入式WEB 服务器实验 实验报告封面 实验步骤 1.阅读理解源码 进入/arm2410cl/exp/basic/ ...
随机推荐
- [T-ARA][Day by Day]
歌词来源:http://music.163.com/#/song?id=22704409 作曲 : 金泰贤/赵英秀 [作曲 : 金泰贤/赵英秀] [作曲 : 金泰贤/赵英秀] 作词 : 金泰贤/赵英秀 ...
- Current urgent plan(3/30)
1. resume improving 1.1 project from Udacity 1.2 project from class 1.3 find career center's help 1. ...
- java继承-final关键词用法
final关键字特点: 1.可以用来修饰变量.方法.类. 2.修饰的变量是一个常量.一旦被赋值就不能被修改(常量一般都和static关键字配合使用) 3.修饰类代表此类不能被继承4.修饰方法代表次方法 ...
- Jenkins在CentOS中的安装
环境准备: tomcat,jdk 包准备:Jenkins的war包,下载路径:https://jenkins.io/download/ 把下载好的war包放在tomcat的webapps中,重启tom ...
- PaaS平台– Google App Engine的开源实现AppScale环境搭建
搭建好开发环境介绍: 硬件平台:HP Z800 工作站 内存:24GB 硬盘:1TB 虚拟化环境:XenServer 6.2.0 VM1:Ubuntu 12.04 amd64 server ...
- 苹果浏览器样式重置submit
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/XTQueen_up/article/details/34446541 大家刚接触写手机页面 也许都会 ...
- Java并发案例02---生产者消费者问题
package example; import java.util.LinkedList; import java.util.concurrent.TimeUnit; public class MyC ...
- 消息中间件--"rocketmq"02之QuickStart
依赖 <dependency> <groupId>com.alibaba.rocketmq</groupId> <artifactId>rocketmq ...
- 解决Linux 安装python3 .5 解决pip 安装无法成功问题ssl安全拦截无法pip安装库问题
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not avail ...
- Redis(三)内存模型
本文转载自编程迷思,原文链接 深入学习Redis(1):Redis内存模型 前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可 ...