zoukankan      html  css  js  c++  java
  • #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("
    ");
        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)] = '';
                closedir(dir_ptr);
                return ;
            }
        }
        fprintf(stderr, "error looking for inode number %d
    ", (int)inode_num);
        exit(1);
    }
    
  • 相关阅读:
    CDN下nginx获取用户真实IP地址
    sshpass批量执行操作
    查看linux系统,服务,配置文件被修改的时间
    linux /proc/sys/fs/file-nr /proc/sys/fs/file-max /etc/security/limits.conf 三者的关联
    SharePoint解决方案及开发系列(1)-BPM
    Office 365系列(三) -Office 365 Pro plus 安装
    Office 365系列(二) -一些比较容易混淆的概念
    Office 365系列(-)
    C# 爬虫 (var X$4 = [''x5f', 'x2d']) 解密方法
    转载:百度地图API:绘制工具栏控件
  • 原文地址:https://www.cnblogs.com/20175201zc/p/12020275.html
Copyright © 2011-2022 走看看