zoukankan      html  css  js  c++  java
  • pwd 命令编写

    该程序模拟系统的 pwd命令,当然功能也没有它的强大

    程序主要是使用 chdir(const char* path)函数,该函数使当前的目录跳转到指定的目录中

    程序使用递归的方式一步一步的返回目录的路径

    相关函数介绍 成功返回0,失败返回-1

    mkdir(char *pathname,mode_t mode)

    rmdir(const char* path)

    unlink(const char *path)

    link(const char *old,const char *new)

    rename(const char* from,const char *to) 重命名函数实际是先建立与新文件的连接,然后删除以前的连接来实现文件重命名的,使用link,unlink函数

    /**
    * pwd.c
    */
    #include
    <stdio.h>
    #include
    <unistd.h>
    #include
    <sys/types.h>
    #include
    <sys/stat.h>
    #include
    <dirent.h>
    void print_cur_path();
    void get_path_name(int ino,char *path_name);
    int get_ino(char *dir_name);
    int main(int ac,char *av[])
    {
    print_cur_path(get_ino(
    "."));
    printf(
    "\n");
    return 0;
    }
    void print_cur_path(int ino)
    {
    char path_name[BUFSIZ];
            
    if(get_ino("..")!=ino)
            {
                    chdir(
    "..");
                    get_path_name(ino,path_name);
                    print_cur_path(get_ino(
    "."));
                    printf(
    "/%s",path_name);
            }
    }
    void get_path_name(int ino,char *path_name)
    {
            DIR 
    *dir;
            
    struct dirent *dir_name=NULL;

            
    if((dir=opendir("."))==NULL)
            {
                    perror(
    "can'n open current directory.\n");
                    exit(
    1);
            }
            
    while((dir_name=readdir(dir))!=NULL)
            {
                    
    if(dir_name->d_ino==ino)
                    {
                    strncpy(path_name,dir_name
    ->d_name,BUFSIZ);
                    path_name[BUFSIZ
    -1]='\0';
                    closedir(dir);
                    
    return;
                    }
            }
            perror(
    "read directory name error.\n");
            error(
    1);
            closedir(dir);

    }
    int get_ino(char *dir_name)
    {
    struct stat st_file;
    if(stat(dir_name,&st_file)==-1)
            {
            perror(dir_name);
            exit(
    1);
            }
    return st_file.st_ino;
    }
  • 相关阅读:
    通过IP地址和子网掩码与运算计算相关地址
    IP地址与子网掩码的计算
    win10用键盘控制鼠标
    requirements.txt
    vue中axios使用二:axios以post,get,jsonp的方式请求后台数据
    vue中axios使用一:axios做拦截器
    git切换分支冲突解决-删除分支
    获取指定月份前的第一天和最后一天及两个日期之间的月份列表
    git远程版本回退
    git Please move or remove them before you can merge
  • 原文地址:https://www.cnblogs.com/ringwang/p/1429853.html
Copyright © 2011-2022 走看看