zoukankan      html  css  js  c++  java
  • Linux命令学习——pwd命令

    1.答:pwd是Print Working Directory的缩写,其功能是显示当前所在工作目录的全路径。主要用在当不确定当前所在位置时,通过pwd来查看当前目录的绝对路径。
    pwd [选项]
    参数:
    -L:--logical,显示当前的路径,有连接文件时,直接显示连接文件的路径,(不加参数时默认此方式),
    -p:--physical,显示当前的路径,有连接文件时,不使用连接路径,直接显示连接文件所指向的文件。当包含多层连接文件时,显示连接文件最终指向的文件。
    --help:显示帮助信息。
    --version:显示版本信息。
    示例:

    2.答:使用man -k dir | grep 2命令查看有哪些跟pwd相关的系统调用。发现有两个可能用到的函数 getcwd()和readdir

    伪代码如下:

    定义数组buf[MAXPATH];
    调用getcwd(buf, MAXPATH);
    输出返回值;
    
    while(1)
    {
        读取"."和".."的信息
        if("."的inode==".."的inode)
        {
            退出;
        }
        else
        {
            chdir("..");
            while(dirent->inode!=前面"."的inode)
            {
                dirent=readdir();
            }
            dirent->name入栈;
        }
    }
    for 栈顶->栈底
        print 栈顶信息
    

    3.答:
    实验代码:

    //pwd1.c
    #include <stdio.h>
    #include <unistd.h>
    #define MAXPATH 50
     
    int main()
    {
        char path[MAXPATH];
        puts(getcwd(path, MAXPATH));
        return 0;
    }
    
    //pwd2.c
    #include <stdio.h>
    
    #include <dirent.h>
    
    #include <unistd.h>
    
    #include <sys/types.h>
    
    #include <string.h>
    
     
    
    int main()
    
    {
    
     
    
        DIR *dirptr=NULL;
    
        struct dirent *current_dirent=NULL, *parent_dirent=NULL, *tmp_dirent=NULL;
    
        int count=0;
    
        ino_t current_inode;
    
        char path[256][256];
    
     
    
        while(1)
    
        {
    
            dirptr=opendir(".");
    
            do
    
            {
    
                current_dirent=readdir(dirptr);
    
            }while(strcmp(current_dirent->d_name, ".")!=0);
    
            current_inode=current_dirent->d_ino;
    
            closedir(dirptr);
    
            dirptr=opendir(".");
    
            do
    
            {
    
                parent_dirent=readdir(dirptr);
    
            }while(strcmp(parent_dirent->d_name, "..")!=0);
    
            closedir(dirptr);
    
            if(((long)parent_dirent->d_ino)==((long)current_dirent->d_ino))
    
            {
    
                break;
    
            }
    
            else
    
            {
    
                chdir("..");
    
                dirptr=opendir(".");
    
                do
    
                {
    
                    tmp_dirent=readdir(dirptr);
    
                }while(tmp_dirent->d_ino!=current_inode);
    
                closedir(dirptr);
    
                count++;
    
                strcpy(path[count], tmp_dirent->d_name);
    
            }
    
        }
    
        int i;
    
        for(i=count;i>0;i--)
    
        {
    
            printf("/%s", path[i]);
    
        }
    
        printf("
    ");
    
     
    
        return 0;
    
    }
    
    
    

    4.测试

  • 相关阅读:
    【Mysql+shell】查询结果导出到文件,文件数据导入到数据库
    【mysql】IP地址整数int和varchar的转换
    【JVM】Class结构之常量池
    【Java】Java初始化过程总结
    【转】探索 ConcurrentHashMap 高并发性的实现机制
    【并发编程】使用BlockingQueue实现<多生产者,多消费者>
    【FTP】FTP文件上传下载-支持断点续传
    【SFTP】使用Jsch实现Sftp文件下载-支持断点续传和进程监控
    【大数据】基本概念--01(转)
    【Java】Java环境变量配置
  • 原文地址:https://www.cnblogs.com/lcyll/p/12046002.html
Copyright © 2011-2022 走看看