#20175201 实现mypwd
实验要求
学习pwd命令
研究pwd实现需要的系统调用(man -k; grep),写出伪代码
实现mypwd
测试mypwd
了解pwd命令
pwd是"Print Working Directory"的缩写,它的功能是显示当前工作目录的绝对路径。用于在用户不确定当前所在位置的时候,通过pwd命令来查看当前目录的绝对路径。
利用man -k key学习pwd命令
先在终端中输入man -k pwd

然后根据上面的提示,输入man pwd 1

参数:
-L:(logical)显示当前的路径,有连接文件时,直接显示连接文件的路径,(不加参数时默认此方式)
-p:(physical)显示当前的路径(物理路径),有连接文件时,不使用连接路径,直接显示连接文件所指向的文件
如何实现pwd
代码运行结果

代码
//
//  main.c
//  pwd
//
//  Created by shadow on 2019/12/11.
//  Copyright © 2019 shadow. All rights reserved.
//
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<dirent.h>
#define SIZE 128
ino_t get_inode(char *dirname);
void get_work_dir(ino_t inode_num);
void inode_to_dirname(ino_t inode_num, char *buf, int buflen);
int main(void)
{
    get_work_dir(get_inode("."));
    printf("\n");
    return 0;
}
ino_t get_inode(char *dirname)
{
    struct stat info;
    if (stat(dirname, &info) == -1)
    {
        perror("dirname");
        exit(1);
    }
    return info.st_ino;
}
void get_work_dir(ino_t inode_num)
{
    ino_t parent_inode;
    char buf[SIZE];
    if (get_inode("..") != inode_num)
    {
        chdir("..");
        inode_to_dirname(inode_num, buf, SIZE);
        parent_inode = get_inode(".");
        get_work_dir(parent_inode);
        printf("/%s", buf);
    }
}
void inode_to_dirname(ino_t inode_num, char *buf,int buflen)
{
    DIR *dir_ptr;
    struct dirent *dire;
    if ((dir_ptr = opendir(".")) == NULL)
    {
        perror(".");
        exit(1);
    }
    while ((dire = readdir(dir_ptr)) != NULL)
    {
        if (dire->d_ino == inode_num)
        {
            strncpy(buf, dire->d_name, buflen);
            buf[strlen(buf)] = '\0';
            closedir(dir_ptr);
            return ;
        }
    }
    fprintf(stderr, "error looking for inode number %d\n", (int)inode_num);
    exit(1);
}
#20175201 实现mypwd的更多相关文章
- 2017-2018-1 20155205  实现mypwd
		2017-2018-1 20155205 实现mypwd 课堂总结 根据上课对ls -l功能的实现,我总结了实现一个linux命令需要的步骤: 使用man -k xx | grep xx查看帮助文档, ... 
- 20155227 实现mypwd
		20155227 实现mypwd 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 课堂学习笔记 实现mypwd 在 ... 
- 2017-2018-1 20155306 mypwd的实现
		2017-2018-1 20155306 mypwd的实现 一.pwd的使用 功能: Linux中用 pwd 命令来查看"当前工作目录"的完整路径. 命令格式:pwd [选项] 命 ... 
- 实现mypwd
		1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 提交过程博客的链接 代码如图 
- 2018-2019-1 20165231 实现mypwd(选做)
		实现mypwd 要求: 学习pwd命令 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 实现mypwd 测试mypwd pwd: 在Linux层次结构中,想要知道当前所处的目录, ... 
- 20165223 《信息安全系统设计基础》 实现mypwd
		一.学习pwd命令 1. pwd命令简介 英文原名:Print Working Directory 指令功能:打印出当前工作目录 执行权限:All User 指令所在路径:/usr/bin/pwd 或 ... 
- 2018-2019-1 20165234 实现mypwd
		实现mypwd(选做,加分) 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 提交过程博客的链接 
- #20175201 实验二:Java面向对象程序设计
		20175201 实验二:Java面向对象程序设计 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L ... 
- 学号 20175201张驰 《Java程序设计》第8周学习总结
		学号 20175201张驰 <Java程序设计>第8周学习总结 教材学习内容总结 第十五章 知识总结: 1.泛型类声明:可以使用"class 名称"声明一个类,例如:c ... 
随机推荐
- Python 入门之  内置模块 -- hashlib模块
			Python 入门之 内置模块 -- hashlib模块 1.hashlib 摘要算法,加密算法 (1)主要用途: <1> 加密 : md5 sha1 sha256 sha512 md5, ... 
- Django之AJAX传输JSON数据
			目录 Django之AJAX传输JSON数据 AJAX 中 JSON 数据传输: django响应JSON类型数据: django 响应 JSON 类型数据: Django之AJAX传输JSON数据 ... 
- sql server  函数详解(3)数据类型转换函数和文本图像函数
			数据类型转换函数 文本和图像函数 --在同时处理不同数据类型的值时,SQL Server一般会自动进行隐士类型转换.对于数据类型相近的值是有效的,比如int和float,但是对于其它数据类型,例如整型 ... 
- Jade学习(三)之语法规则下
			jade可以自动识别单双标签 // 1.jade内容: input(type="button", value="点击") div // 此时输出❌error:i ... 
- MySQL查询最近一周(最近7天)数据
			参考:https://blog.csdn.net/ouyang111222/article/details/77638826 -表结构 - CREATE TABLE `zk_score` ( `id` ... 
- css3 加载动画
			代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ... 
- Apple历史应用以及开发工具版本(Xcode官方历史版本等等)
			1.Xcode 官方历史版本下载:(需要登录开发者账号) https://developer.apple.com/download/more/ 
- 第四小节之Java 集合类
			Java的集合类就像一个容器,专门用来存储Java类的对象.这些类可以存储任意类型的对象,并且长度可变,统称为集合,这些类位于java.util包中,数组也可以保存多个对象,但在某些情况下无法确定到底 ... 
- 【leetcode】Largest Plus Sign
			题目如下: In a 2D grid from (0, 0) to (N-1, N-1), every cell contains a 1, except those cells in the giv ... 
- Python 元组Ⅱ
			删除元组 元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组,如下实例: 以上实例元组被删除后,输出变量会有异常信息,输出如下所示: 元组运算符 与字符串一样,元组之间可以使用 + ... 
