pwd-robust_getcwd

有现成的函数直接调!其根据有鲁棒性!起始写代码的大部分工作就是在给一个算法增加鲁棒性!

反思

1. 源码中调用的是get_root_dev_info

  struct dev_ino dev_ino_buf;
  struct dev_ino *root_dev_ino = get_root_dev_ino (&dev_ino_buf);

个人认为,有现成的函数调用还是用现成的,但是pwd的源码调用的库都在coreutils/lib中,我调不了,所以就使用了下面的方式。

2. get_root_dev_info中使用的是lstat系统调用获取的根目录dev_info。

lstat与stat的区别在于若文件是软链接,依然获取的就是软链接文件信息。为什么要用lstat,而不是stat呢?为什么我会觉得应该使用stat呢?因为我觉得如果"/",是个软链接的话,应该使用stat获取源文件信息。但是"/"不可能为软链接的!!!,所以用stat和lstat没啥区别了。用那个都是一样的。

推测:使用lstat是一种习惯或者lstat有一些更好的鲁棒性

在这里插入图片描述

2. 为什么要确保文件名开始是’/'呢?(这个情况很难考虑到,让我来写,一开始肯定考虑不到。)

这种情况是在根目录下输入pwd的情形,此时p->start指向的位置刚好为空。

代码

static void
robust_getcwd (struct file_name* file_name)
{
  size_t height = 1;
  struct stat root_sb;
  struct stat dot_sb;

  if (stat ("/", &root_sb))
    exit(1);
  if (stat (".", &dot_sb))
    exit(1);

  while (1)
    {
      /* Break down when reach the root. */
      if (SAME_INODE (root_sb, dot_sb))
		break;

      find_dir_entry (&dot_sb, file_name, height++);
    }

  /* Ensure file_name first character is slash. */
  /* Cound happen this condition? */
  if (file_name->start[0] == '\0')
    file_name_prepend (file_name, "", 0);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值