Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > Linux Programming by Exemple(第五章 目录和文件元数据)-练习2
【标  题】:Linux Programming by Exemple(第五章 目录和文件元数据)-练习2
【关键字】:Linux,Programming,by,Exemple
【来  源】:http://www.cublog.cn/u/17278/showart.php?id=100973

Linux Programming by Exemple(第五章 目录和文件元数据)-练习2

Your Ad Here
/********************************
 第七题:
 在根"/"目录下,'.'的设备号与索引节点号是相同的,".."也是如此.利用这个信息编写 pwd 程序.
  程序必须从寻找当前目录开始,寻找当前目录名是通过读取父目录的内容来实现的.程序然后根据文件系统的层次继续寻找父目录的父目录,直到程序到达根目录.
  向后(从当前目录一直到根目录)输出目录名很容易.你的 pwd 程序如何以正确的方法输出目录名(从根目录到当前目录)?
********************************/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <errno.h>
char *myname;
int process();
int main(int argc, char **argv)
{
    int errs = 0;
    myname = argv[0];
    errs += process();
    printf("\n");
    return (errs != 0);
}
int process( void )
{
  struct stat statb;
  ino_t cur_inode;
  ino_t inode;
  DIR *dir;
  struct dirent *direntp;
  char buf[BUFSIZ];
 
  if ( stat(".", &statb) == -1 )
  {
     fprintf(stderr, "%s: Cannot stat file: %s\n", myname, strerror(errno) );
     exit(1);
  }
  inode = statb.st_ino;
  if ( stat("..", &statb) == -1 )
  {
     fprintf(stderr, "%s: Cannot stat file: %s\n", myname, strerror(errno) );
     exit(1);
  }
  cur_inode = statb.st_ino;
 
  if( cur_inode != inode )
  {
    chdir("..");
    if( (dir = opendir(".")) == NULL ){
       fprintf(stderr, "%s: Cannot open directory\n", myname, strerror(errno) );
       exit(1);
    }
   
    while( (direntp = readdir( dir )) != NULL )
       if( direntp->d_ino == inode )
       {
          strcpy(buf, direntp->d_name);
          closedir( dir );
       }
    if ( stat(".", &statb) == -1 )
    {
       fprintf(stderr, "%s: Cannot stat file: %s\n", myname, strerror(errno) );
       exit(1);
    }
   
    process();
    printf("/%s", buf);
  }
 
 
    return 0;
}
 
编程修养之C语言篇:【上一篇】
C语言指针测试题 (转载):【下一篇】
【相关文章】
  • How C Programming Works
  • Linux下的动态连接库及其实现机制[转]
  • Oracle安装(linux)总结一下
  • Oracle安装(linux)总结
  • linux解压方式大集合
  • LINUX下Mail服务器配置
  • linux下的实现WIN下tree的shell
  • LINUX下WINDOWS挂载
  • 2010年中国Linux市场将达5100万美元
  • 利用ndiswrapper解决Linux无线上网问题
  • 【随机文章】
  • 学习oracle sql loader 的使用
  • 轮渡公司售票管理系统需求说明
  • vmware 网络设置三:理解虚拟网络的类型
  • 要让软件项目失败很容易
  • 利用Dataview实现搜索指定目录下的所有文件,以指定的条件排序(可以按文件名升降序,最后修改时间升降序)
  • DSP集成开发环境中的混合编程及FFT算法的实现
  • 网民“红线”强拴Google百度 MSN soso sogou,专家表示此举涉嫌侵权
  • 挤掉一切水分!教你检查LCD指标真实性
  • 实施BI(商业智能)项目要点,经验小结,见笑
  • 实时录像机SVR-24PRT
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.