2017-2018-1 20155338 加分项目——PWD的实现
2024-09-25 01:52:10
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");
}
}
运行结果为:
最新文章
- 《程序员的自我修养》读书笔记 - dllimport
- #查看Linux的版本信息
- 【读书笔记】iOS-Objective-C对C的扩展基础知识
- libev笔记
- 重新认识Intent
- ArcGIS多面体(multipatch)解析(一)
- linux搭建phantomjs+webdriver+testng+ant自动化工程
- 批量去除office超链接
- IOS开发-UI学习-UITextField的各种属性设置
- [转载]解决win10 VC++6.0 应用程序无法正常运行 0xc0000142
- jdk动态代理与cglib代理、spring aop代理实现原理
- 弹性布局--flex方向
- 理解jQuery的$.extend与$.fn.extend
- SpringBoot系列——i18n国际化
- linux下sort命令详解大全
- java 前台使用枚举方法(二)
- 小白python 安装
- MySQL存储过程-->;通过游标遍历和异常处理迁移数据到历史表
- 中式台球 规则 ( ChinaBilliards )
- 2-51单片机ESP8266学习-AT指令(开发板51单片机自动冷启动下载原理)