2017-2018-1 20155338 加分项目——PWD的实现

项目要求

1 学习pwd命令
2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码
3 实现mypwd
4 测试mypwd

实现过程

首先通过man 命令了解了一下pwd的用法

试试pwd命令的用法:

代码实现:

需要用到readdir函数

可以用man 命令了解了一下readdir函数的用法。

代码如下:


#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <unistd.h>
#include<string.h>
ino_t get_inode(char* file);
void get_inode_name(ino_t i_node,char *file_name,int length);
void print_direct(ino_t i_node);
void main()
{
ino_t i_node; print_direct(get_inode("."));
printf("\n"); } void print_direct(ino_t i_node)
{
ino_t n_inode;
char *file_name[256];
if(get_inode("..")!=get_inode(".")){
chdir("..");
get_inode_name(i_node,file_name,256);
n_inode=get_inode(".");
print_direct(n_inode);
printf("/%s",file_name);
}
} void get_inode_name(ino_t i_node,char *file_name,int length)
{
DIR* dir_ptr;
struct dirent* direntp;
dir_ptr = opendir(".");
while((direntp = readdir(dir_ptr)) != NULL)
{
if(direntp->d_ino==i_node)
{
strncpy(file_name,direntp->d_name,length);
file_name[length-1]='\0';
closedir(dir_ptr);
} } } ino_t get_inode(char* file)
{
struct stat buf;
if(stat(file,&buf)!=-1)
{
return buf.st_ino;
}
else{
printf("failed to get inode");
}
}

运行结果为:

2017-2018-1 20155338 加分项目——PWD的实现的更多相关文章

  1. 2017-2018-1 20155320加分项目——pwd的实现

    2017-2018-1 20155320加分项目--pwd的实现 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd ...

  2. 2017-2018-1 20155330 《信息安全系统设计基础》加分项目--实现mypwd

    2017-2018-1 20155330 <信息安全系统设计基础>加分项目--实现mypwd pwd命令 命令功能:查看"当前工作目录"的完整路径. 通过man命令查看 ...

  3. 2017 年度码云新增项目排行榜 TOP 50,为它们打“call”

    2017 年度码云新增项目排行榜 TOP 50 正式出炉 !2017 结束了,我们来关注一下这一年里码云上新增的最热门的开源项目吧.此榜单根据 2017 年在码云上新增开源项目的 Watch.Star ...

  4. 2017 码云最火爆开源项目 TOP 50,你都用过哪些

    本文转自:https://share.html5.qq.com/fx/u?r=JdjvzwC 2017 年度码云热门项目排行榜 TOP 50 出炉啦!我们根据所有开源项目在码云的用户关注度.活跃度.访 ...

  5. MyEclips 2017/2018 (mac 版)安装与破解

    MyEclips 2017/2018 (mac 版)安装与破解 现在在学J2EE,然后使用的工具就是 MyEclipse,现在就抛弃 Eclipse 了,我就不多说它俩的区别了,但是 MyEclips ...

  6. MyEclipse 2017/2018 安装与破解 图文教程

    SSM 框架-02-MyEclipse 2017/2018 安装与破解 现在在学J2EE,然后使用的工具就是 MyEclipse,现在就抛弃 Eclipse 了,我就不多说它俩的区别了,但是 MyEc ...

  7. </2017><2018>

    >>> Blog 随笔原始文档及源代码 -> github: https://github.com/StackLike/Python_Note >>> 统计信 ...

  8. 我的2017&2018

    最近项目进入验收阶段,所以上班没那么忙碌了,但是怎么说呢,我可能天生是闲不住的主,觉得浑身不自在(我这样的人是不是特别不会享福),此处应该有个笑脸哈. 翻看了博客园好几个大牛写的技术文章,感慨大牛不愧 ...

  9. 【分享】2017 开源中国新增开源项目排行榜 TOP 100

    2017 年开源中国社区新增开源项目排行榜 TOP 100 新鲜出炉! 这份榜单根据 2017 年开源中国社区新收录的开源项目的关注度和活跃度整理而来,这份最受关注的 100 款开源项目榜单在一定程度 ...

随机推荐

  1. linux上设置mysql编码

    linux下设置mysql编码 linux下设置mysql编码 首先查找MySql的cnf文件的位置: [root@flyHome gaoxiang]# find / -iname '*.cnf' - ...

  2. Jquery Ajax 提交json数据

    在MVC控制器(这里是TestController)下有一个CreateOrder的Action方法 [HttpPost] public ActionResult CreateOrder(List&l ...

  3. [翻译] GMCPagingScrollView

    GMCPagingScrollView https://github.com/GalacticMegacorp/GMCPagingScrollView GMCPagingScrollView is a ...

  4. 显示iOS所有系统字体

    显示iOS所有系统字体 源码地址: https://github.com/YouXianMing/UI-Component-Collection 效果图: 便于你开发中寻找适合自己的字体, demo中 ...

  5. [翻译] JKLLockScreenViewController

    JKLLockScreenViewController https://github.com/tiny2n/JKLLockScreenViewController Overview It is Loc ...

  6. Redis学习---基础学习[all]

    什么是NoSQL型数据库 NoSQL数据库---NoSQL数据库的分类 Redis学习---NoSQL和SQL的区别及使用场景 Redis学习---负载均衡的原理.分类.实现架构,以及使用场景 什么是 ...

  7. centos7.4应用之KVM

    最小安装系统: 参考博客:https://www.cnblogs.com/chenjiahe/p/5911965.html 辅助命令 yum install make bison flex autom ...

  8. C++ Boost在Windows和Linux下的编译安装

    再debian下直接apt-get install gcc g++就可以了.按照类似的逻辑,再Fedora下yum install gcc g++ 报告无法找到g++包. 差了一下,原来这个包的名字叫 ...

  9. 转 oracle的热备份和冷备份

    一.冷备份介绍:    冷备份数据库是将数据库关闭之后备份所有的关键性文件包括数据文件.控制文件.联机REDO LOG文件,将其拷贝到另外的位置.此外冷备份也可以包含对参数文件和口令文件的备份,但是这 ...

  10. python第十七课——列表生成式

    1.列表生成式: 什么是列表生成式? 它就是一串表达式,专门用于生成列表对象,当中包含一系列的业务逻辑: 结构:简介.优雅.阅读性好:比传统获取列表对象来的更加的方便: 它是语法糖的一种: 什么是语法 ...