2018-2019-1 20165226《信息安全系统设计基础》 pwd命令的实现
2018-2019-1 20165226《信息安全系统设计基础》 pwd命令的实现
一、学习pwd
查看pwd

得知一个嫩过去文件路径的函数——
getcwd

i节点值
通过
ls -i -a查看.、..目录对应的值
- stat结构体
struct stat {
mode_t st_mode; //文件对应的模式,文件,目录等
ino_t st_ino; //inode节点号
dev_t st_dev; //设备号码
dev_t st_rdev; //特殊设备号码
nlink_t st_nlink; //文件的连接数
uid_t st_uid; //文件所有者
gid_t st_gid; //文件所有者对应的组
off_t st_size; //普通文件,对应的文件字节数
time_t st_atime; //文件最后被访问的时间
time_t st_mtime; //文件内容最后被修改的时间
time_t st_ctime; //文件状态改变时间
blksize_t st_blksize; //文件内容对应的块大小
blkcnt_t st_blocks; //文件内容对应的块数量
};
由此可知通过
ino_t返回i-Node值
二、编写代码
- 思路1
(1)得到"."的i节点号,称其为n(使用stat)
(2)chdir ..(使用chdir)
(3)找到inode号为n的节点,得到其文件名。重复上述操作直到当前目录“.”的inode值等于".."的inode值
- 代码1
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
ino_t get_inode(char *);
void printpathto(ino_t);
void inum_to_name(ino_t ,char *,int);
int main()
{
printpathto(get_inode("."));
printf("\n");
return 0;
}
ino_t get_inode(char * filename)
{
struct stat buffer;
if(lstat(filename,&buffer) == -1)
{
perror("can't stat");
exit(1);
}
return buffer.st_ino;
}
void printpathto(ino_t ino)
{
ino_t ino_parent = get_inode("..");
if(ino_parent == ino)
return;
else
{
struct stat s;
char buffer[255];
chdir("..");
inum_to_name(ino,buffer,255);
printpathto(ino_parent);
printf("/%s",buffer);
}
}
void inum_to_name(ino_t ino,char * buffer,int buffer_length)
{
DIR * dir;
struct dirent * direntp;
struct stat stat_buffer;
dir = opendir(".");
if(dir == NULL)
{
perror("can't open dir .");
exit(1);
}
while((direntp = readdir(dir)) != NULL)
{
lstat(direntp->d_name,&stat_buffer);
if(stat_buffer.st_ino == ino)
{
strncpy(buffer,direntp->d_name,buffer_length);
buffer[buffer_length-1] = '\0';
closedir(dir);
return;
}
}
}
- 代码2(使用getcwd)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(){
char *filepath=NULL;
filepath=getcwd(NULL,0);
puts(filepath);
free(filepath);
return 0;
}
- 测试结果

2018-2019-1 20165226《信息安全系统设计基础》 pwd命令的实现的更多相关文章
- 2017-2018-1 20155201 《信息安全系统设计基础》 pwd命令的实现
2017-2018-1 20155201 <信息安全系统设计基础> pwd命令的实现 一.对pwd命令的学习 在终端中输入man pwd查看手册中对pwd这一命令的解释: 以绝对路径的方式 ...
- 2017-2018-3 20155337《信息安全系统设计基础》 pwd指令学习
2017-2018-3 20155337<信息安全系统设计基础> pwd指令学习 任务要求 学习pwd指令 研究pwd实现需要的系统调用(man -k:grep),写出伪代码 实现mypw ...
- 2018-2019-1 20165212 《信息安全系统设计基础》第八周学习总结(pwd)
2018-2019-1 20165212 <信息安全系统设计基础>第八周学习总结 一.知识点总结 1.三种并发方式 构造并发程序的方法有三种: 进程 线程 I/O多路复用 进程:用内核来调 ...
- 20135328信息安全系统设计基础第一周学习总结(Linux应用)
学习计时:共xxx小时 读书: 代码: 作业: 博客: 一.学习目标 1. 能够独立安装Linux操作系统 2. 能够熟练使用Linux系统的基本命令 3. 熟练使用Linux中用户管理命令/ ...
- 20155326 2017-2018-1 《信息安全系统设计基础》课下加分项mypwd实现
20155326 2017-2018-1 <信息安全系统设计基础>课下加分项mypwd实现 pwd命令能做什么 在虚拟机中输入pwd查看其返回的是什么 通过上图得知pwd命令用来显示目录. ...
- 2017-2018-1 20155210 《信息安全系统设计基础》 实现mypwd
2017-2018-1 20155210 <信息安全系统设计基础> 实现mypwd 作业要求: 1.学习pwd命令 2.研究pwd实现需要的系统调用(man -k; grep),写出伪代码 ...
- 2017-2018-1 20155214 《信息安全系统设计基础》 第9周课下测试-mypwd
2017-2018-1 20155214 <信息安全系统设计基础> 第9周课下测试-mypwd(深入版) 题目要求: 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; ...
- 2017-2018-1 20155216 《信息安全系统设计基础》 实现mypwd
2017-2018-1 20155216 <信息安全系统设计基础> 实现mypwd 作业要求: 1.学习pwd命令 2.研究pwd实现需要的系统调用(man -k; grep),写出伪代码 ...
- 2017-2018-1 20155226 《信息安全系统设计基础》课下实践——实现mypwd
2017-2018-1 20155226 <信息安全系统设计基础>课下实践--实现mypwd 1 学习pwd命令 输入pwd命令 发现他是给出当前文件夹的绝对路径. 于是 man 1 pw ...
随机推荐
- MyBatis的简单入门学习
一个新知识开始是最难学的.(万事开头难) MyBatis大体分三层,接口层,数据处理层,基础支撑层. 其中接口层不是java中的那个interface,而是框架和程序员之间的对接.一个API,程序员可 ...
- Flask 6 模板2
NOTE Jinja2提供了多种控制程序,可以用来改变模板的渲染流程. 1.在模板中使用条件控制语句: templates/condition.html: {% if user %} Hello, { ...
- 现在 做java 构架(RabbitMQ redis mysql )之类的
现在 做java 构架(RabbitMQ redis mysql )之类的
- 使用CAS实现无锁的SkipList
无锁 并发环境下最常用的同步手段是互斥锁和读写锁,例如pthread_mutex和pthread_readwrite_lock,常用的范式为: void ConcurrencyOperation() ...
- SSH防止暴力破解--fail2ban
一.ssh密钥对无交互登录 实战1:通过密钥进行sshd服务认证 服务端:linl_S IP:10.0.0.15 客户端:lin_C IP:10.0.0.16 1)在客户端生成密钥对 ...
- 关于java中ArrayList的快速失败机制的漏洞——使用迭代器循环时删除倒数第二个元素不会报错
一.问题描述 话不多说,先上代码: public static void main(String[] args) throws InterruptedException { List<Strin ...
- bzoj-4887-dp+矩阵快速幂
4887: [Tjoi2017]可乐 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 247 Solved: 170[Submit][Status][D ...
- UVA-4288 Cat vs. Dog (最大独立集)
题目大意:猫狗大赛,s个猫和t个狗,有v个投票者,他们不是爱猫者就是爱狗者,所以爱猫者一定会对某条猫投晋级票,对某条狗投淘汰票,爱狗者亦然.现在已知这v个人的投票情况,应该使哪些畜牲晋级或淘汰才能使投 ...
- notepad++个人专注
notepad++个人专注 快捷键 功能 1 Ctrl>>>>>>>>>> Ctrl + b 匹配括号 Ctrl + d 选中 ...
- 快速切题 poj 2996 Help Me with the Game 棋盘 模拟 暴力 难度:0
Help Me with the Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3510 Accepted: ...