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

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

项目要求

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

实现过程

首先通过man 命令了解了一下pwd的用法
1071544-20171119201527984-1181367494.png

试试pwd命令的用法:
1071544-20171119201534359-373435025.png

代码实现:

需要用到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");
 }
}

运行结果为:

1071544-20171119201547734-463947837.png

转载于:https://www.cnblogs.com/Hdywan/p/7861395.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值