思维:(1)得到"."的i节点号,叫n(使用stat)

(2)chdir ..(使用chdir)

(3)找到inode号为n的节点,得到其文件名称。

反复上述操作直到当前文件夹“.”的inode值等于".."的inode值

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h> ino_t get_inode(char *);
void printpathto(ino_t);
void inum_to_name(ino_t ,char *,int); int main()
{
printpathto(get_inode("."));
printf("\n");
return 0;
} ino_t get_inode(char * filename)
{
struct stat buffer;
if(lstat(filename,&buffer) == -1)
{
perror("can't stat");
exit(1);
}
return buffer.st_ino;
} void printpathto(ino_t ino)
{
ino_t ino_parent = get_inode("..");
if(ino_parent == ino)
return;
else
{
struct stat s;
char buffer[255];
chdir("..");
inum_to_name(ino,buffer,255);
printpathto(ino_parent);
printf("/%s",buffer);
}
} void inum_to_name(ino_t ino,char * buffer,int buffer_length)
{
DIR * dir;
struct dirent * direntp;
struct stat stat_buffer;
dir = opendir(".");
if(dir == NULL)
{
perror("can't open dir .");
exit(1);
}
while((direntp = readdir(dir)) != NULL)
{
lstat(direntp->d_name,&stat_buffer);
if(stat_buffer.st_ino == ino)
{
strncpy(buffer,direntp->d_name,buffer_length);
buffer[buffer_length-1] = '\0';
closedir(dir);
return;
}
}
}

自己写shell命令pwd的更多相关文章

  1. 自己动手写shell命令之write

    Linux下write命令同意用户跟其它终端上的用户对话.用c语言实现shell命令write.代码例如以下: #include <stdio.h> #include <fcntl. ...

  2. 数据仓库001 - 复习Linux shell命令 - pwd mkdir mv tail -f xxx.log 和 ail -F xxx.log

    1.  [root@localhost ~]#  的含义 ?  [登录的用户  机器的名称 家目录] 2. 查看当前光标所在的目录   pwd [root@localhost ~]# pwd /roo ...

  3. 自己动手写shell命令之ls -R1fF

    ls命令的R參数代表递归的列出全部子目录中的全部文件,1表示每一行仅仅显示一个文件或目录,f表示不排序即输出.F表示在每项的输出的最后依据其文件类型对应的加上*/=>@|字符.通过c语言实现ls ...

  4. 自己动手写shell命令之ls

    linux下ls命令(支持-R參数)的c语言实现: #include <stdio.h> #include <sys/types.h> #include <dirent. ...

  5. 自己动手写shell命令之more

    unix下more命令的简单实现: #include <stdio.h> #define PAGELEN 24 #define LINELEN 512 int do_more(FILE * ...

  6. 写了一个Mac快速设置、打开和关闭Web代理的Shell命令

    缘由(痛点) 每次在Mac上设置Web代理,都需要点开"系统偏好设置 -- 网络 -- 高级 -- 代理",然后分别设置Web代理(HTTP)和安全Web代理(HTTPS),设置完 ...

  7. Shell 命令行,写一个自动整理 ~/Downloads/ 文件夹下文件的脚本

    Shell 命令行,写一个自动整理 ~/Downloads/ 文件夹下文件的脚本 在 mac 或者 linux 系统中,我们的浏览器或者其他下载软件下载的文件全部都下载再 ~/Downloads/ 文 ...

  8. Linux 下 Shell 命令的分类及用法

    当你打算真正操纵好你的 Linux 系统,没有什么能比命令行界面更让你做到这一点.为了成为一个 Linux 高手,你必须能够理解 Shell命令的不同类型,并且会在终端下正确的使用它们. 在 Linu ...

  9. bash shell命令(1)

    本文地址:http://www.cnblogs.com/archimedes/p/bash-shell1.html,转载请注明源地址. ls命令 ls用来列出目录的内容,它是用户最常用的命令之一,ls ...

随机推荐

  1. Swift编程语言学习9—— 存储属性和计算属性

    属性将值跟特定的类.结构或枚举关联.存储属性存储常量或变量作为实例的一部分,计算属性计算(而不是存储)一个值.计算属性能够用于类.结构体和枚举里,存储属性仅仅能用于类和结构体. 存储属性和计算属性通经 ...

  2. QML中多样化的ListModel(MultiDelegate)

    在QML的官方例子里面, 基本上都是一样的Delegate, 也就是说不管数据怎样, 样式都是不变的. 如果我们想要根据不同的数据类型来显示不同的UI该怎么办? 这里有一个例子. DataBank L ...

  3. hdu 4284 Travel(floyd + TSP)

    虽然题中有n<=100个点,但实际上你必须走过的点只有H<=15个.而且经过任意点但不消耗C[i]跟D[i]可以为无限次,所以可以floyd预处理出H个点的最短路,之后剩下的...就成了裸 ...

  4. 辛星跟您玩转vim第一节之vim的下载与三种模式

    首先值得一提的是,我的vim教程pdf版本号已经写完了,大家能够去下载,这里是csdn的下载地址:点此下载 ,假设左边的下载地址挂掉了,也能够自行在浏览器以下输入例如以下地址进行下载:http://d ...

  5. 在Ubuntu Desktop打开终端的2种方式

    共有3中方法: 1.在Ubuntu左上角选择File/Open in Terminal 2.快捷键alt+F2调出Run a Command,输入gnome-terminal 添加右键支持 在终端,输 ...

  6. 深入浅出Node.js (1) - Node简介

    1.1 Node的诞生历程 1.2 Node的命名与起源 1.2.1 为什么是JavaScript 1.2.2 为什么叫Node 1.3 Node给JavaScript带来的意义 1.4 Node的特 ...

  7. HDU4719-Oh My Holy FFF(DP线段树优化)

    Oh My Holy FFF Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) T ...

  8. Rapha&#235;l 中文帮助文档(API)

    http://html5css3webapp.com/raphaelApi.htm

  9. struts2对action中的方法进行输入校验(2)

    struts2输入校验流程: 1.类型转换器对请求參数运行类型转换,并把转换后的值赋给aciton中的属性 2.假设在运行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext, ...

  10. Eclipse 未开始 【Ubuntu】

    /usr/lib/eclipse/configuration/1408532831122.log : !SESSION 2014-08-20 19:07:11.055 ---------------- ...