2017-2018-1 20155215 第九周 加分项 PWD命令的实现
1 学习pwd命令
- Linux中用 pwd 命令来查看”当前工作目录“的完整路径。 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录。
在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置。
命令格式:
pwd [选项]命令功能:
查看”当前工作目录“的完整路径
3.常用参数:
- 一般情况下不带任何参数
- 如果目录是链接时:
- 格式:pwd -P 显示出实际路径,而非使用连接(link)路径。
man pwd

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

man -k pwd|grep 1

3 实现mypwd
- 代码如下所示:
#include<stdio.h>
#include<sys/stat.h>
#include<dirent.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#define BUFFER 10
#define BUFFERSIZE 50
int process(char str[][BUFFERSIZE],int h) ;
int get_name(int inode,char str[][BUFFERSIZE],int h) ;
int get_inode(char inode[]);
int main()
{
char path[BUFFER][BUFFERSIZE];
int h=0;
h = process(path,h);
// printf("h = %d",h);
int i2;
for(i2=h-2;i2>=0;i2--)
printf("/%s",path[i2]);
printf("\n");
return 0;
}
int process(char path[][BUFFERSIZE],int h)
{
int inode,father_inode;
inode = get_inode(".");
father_inode = get_inode("..");
chdir("..");
h = get_name(inode,path,h);
if(inode == father_inode) {
return h;
}
h = process(path,h);
return h;
}
int get_inode(char inode[])
{
struct stat buf;
stat(inode, &buf);
return buf.st_ino;
}
int get_name(int inode,char path[][BUFFERSIZE],int h)
{
DIR *dir;
struct dirent *dir2;
if((dir = opendir(".")) == NULL){
perror(".");
exit(-1);
}
while((dir2 = readdir(dir)) != NULL)
{
if(dir2->d_ino == inode)
{
strcpy(path[h],dir2->d_name);
break;
}
}
h = h+1;
return h;
}
4 测试mypwd

2017-2018-1 20155215 第九周 加分项 PWD命令的实现的更多相关文章
- 2017-2018-1 20155338 《信息安全系统设计基础》第5周加分项Mybash的实现
2017-2018-1 20155338 <信息安全系统设计基础>第5周加分项Mybash的实现 使用fork,exec,wait实现mybash 一.fork函数 定义和理解:fork( ...
- 2017-2018-1 20155339 第十一周加分项Linux下Mypwd的实现
2017-2018-1 20155339 第十一周加分项Linux下Mypwd的实现 学习pwd命令 通过man命令查看pwd命令的功能 由图可知pwd命令的用途是显示工作目录的路径名称.pwd 命令 ...
- 学号 20175212 《Java程序设计》第九周学习总结
学号 20175212 <Java程序设计>第九周学习总结 教材学习内容总结 一.MySQL数据库管理系统 1.在官网上下载并安装MySQL 2.在IDEA中输入测试代码Connectio ...
- 20155306 2016-2017-2 《Java程序设计》第九周学习总结
20155306 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 16.1 JDBC入门 Java语言访问数据库的一种规范,是一套API ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330第九周《Java学习笔记》
20145330第九周<Java学习笔记> 第十六章 整合数据库 JDBC入门 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JD ...
- 20145211 《Java程序设计》第九周学习总结——垂死病中惊坐起
教材学习内容总结 JDBC简介 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无须接触底层数据库驱动程序的差异性 JDBC标准分为两个部分:J ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
随机推荐
- jquery自带的方法
5.1,$.trim $.trim(" Hello, chinaren_1123 & 摆渡浮桥! "); //去掉前后空格后->Hello, chinaren ...
- Vue安装依赖npm install时报错问题解决方法
1.vue的安装依赖于node.js,要确保你的计算机上已安装过node.js. 可进入cmd编辑器,输入命令 node -v进行查看.出现版本信息即成功!没有则从浏览器上面下载安装即可,没有安 ...
- Keras官方中文文档:关于Keras模型
关于Keras模型 Keras有两种类型的模型,序贯模型(Sequential)和函数式模型(Model),函数式模型应用更为广泛,序贯模型是函数式模型的一种特殊情况. 两类模型有一些方法是相同的: ...
- Luogu3092:[USACO13NOV]No Change
题面 传送门 Sol 状压一下\(k\),\(f[S]\)表示用过的硬币集合为\(S\)能买到的物品个数 # include <bits/stdc++.h> # define RG reg ...
- 从 HelloWorld 看 Java 字节码文件结构
很多时候,我们都是从代码层面去学习如何编程,却很少去看看一个个 Java 代码背后到底是什么.今天就让我们从一个最简单的 Hello World 开始看一看 Java 的类文件结构. 在开始之前,我们 ...
- Ambari大数据的管理利器
概述 一个完全开源的管理平台,用于供应,管理,监控和保护Apache Hadoop集群.Apache Ambari客户管理和操作Hadoop集群 Apache Ambari作为Hortonworks数 ...
- IE浏览器右键菜单插件开发(下篇)——如何用c#安装、卸载IE右键插件
建立Installer安装类,如图: 代码如下: using Microsoft.Win32; using ResourceShare.UserClient.Common; using System; ...
- Android OpenGL ES 开发(九): OpenGL ES 纹理贴图
一.概念 一般说来,纹理是表示物体表面的一幅或几幅二维图形,也称纹理贴图(texture).当把纹理按照特定的方式映射到物体表面上的时候,能使物体看上去更加真实.当前流行的图形系统中,纹理绘制已经成为 ...
- Java集合中的LinkedHashMap类
jdk1.8.0_144 本文阅读最好先了解HashMap底层,可前往<Java集合中的HashMap类>. LinkedHashMap由于它的插入有序特性,也是一种比较常用的Map集合. ...
- Python包和版本管理的最好工具----pipenv
pipenv 是Kenneth Reitz大神的作品,提供Python的各个版本间的管理,各种包管理.个人觉得是virtualenv pip等工具的合体. pipenv主要有以下特性: (1)以前我们 ...