一个关于chroot函数的帖子

本文探讨了一个关于chroot和getcwd函数的小程序运行结果的疑惑。通过社区讨论明确了chroot函数的作用及如何正确使用getcwd获取当前工作目录。
albcamus2004-11-22 03:26
一个小程序的运行结果,不明白~~(getcwd和chroot函数

[code]      1 #include <unistd.h>;
      2
      3 int main(void)
      4 {
      5         chroot("/tmp");
      6         printf("after chroot,getcwd is %s/n",getcwd(NULL,0));
      7
      8         chdir("/");
      9         printf("after chdir /,getcwd is %s/n",getcwd(NULL,0));
     10
     11         return 0;
     12 }
     13[/code]

按理说chroot之后,根目录就是“/tmp”了,可为什么第9行的getcwd()的结果依然是“/”呢?
[code][root@localhost 15]# ./a.out
after chroot,getcwd is /root/prog/linuxC/bach/15
after chdir /,getcwd is /
[/code]

albcamus2004-11-23 00:05
一个小程序的运行结果,不明白~~(getcwd和chroot函数

顶到第一页,朋友们帮忙看看呀,多谢多谢:)

twen3452004-11-23 00:50
一个小程序的运行结果,不明白~~(getcwd和chroot函数

chdir("/")更改当前工作目录到 /,用getcwd获取,结果应该是 /

albcamus2004-11-23 01:05
一个小程序的运行结果,不明白~~(getcwd和chroot函数

[quote][i]原帖由 "twen345"]chdir("/")更改当前工作目录到 /,用getcwd获取,结果应该是 /[/quote 发表:[/i]


程序的运行结果是这样的。书上说应该是/tmp,是一本叫做《LinuxC函数库参考手册》,我已经发现不少错误了~~

albcamus2004-11-23 01:08
一个小程序的运行结果,不明白~~(getcwd和chroot函数

但我不明白的是,chroot究竟有什么用呢?

yuxh2004-11-23 01:14
一个小程序的运行结果,不明白~~(getcwd和chroot函数

1、getcwd的第一个参数是NULL的时候会malloc,所以这样的用法不规范;
2、chroot需要P_FILESYS的权限,查看chroot的返回码确定函数调用是成功的(建议用超级用户去执行)
3、chroot后,即使chdir成功,用getcwd也看不出“绝对”路径,所以你的运行结果并没有错。可以在tmp下建一个test目录,chdir("/test")看看会不会成功。
[code] #include <unistd.h>;

  int main(void)
  {
          char *pwd;
          int ret;

          ret = chroot("/tmp");
          if(ret != 0) {
             perror("chroot:");
             exit(-1);
         }
         pwd = getcwd(NULL, 80);
         printf("after chroot,getcwd is [%s]/n",pwd);
         free(pwd);

         chdir("/test");
         pwd = getcwd(NULL, 80);
         printf("after chdir /,getcwd is [%s]/n",pwd);
         free(pwd);

         return 0;
  }[/code]

流氓无产者2004-11-23 01:29
一个小程序的运行结果,不明白~~(getcwd和chroot函数

你的chroot肯定失败了

albcamus2004-11-23 01:38
一个小程序的运行结果,不明白~~(getcwd和chroot函数

明白了!!多谢多谢!!

原来chroot之后的“/”符号,指的就是原来的/tmp路径了,真的很感谢:-)
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值