免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2653 | 回复: 7
打印 上一主题 下一主题

[函数] 一个小程序的运行结果,不明白~~(getcwd和chroot函数) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-11-22 11:26 |只看该作者 |倒序浏览
  1.       1 #include <unistd.h>;
  2.       2
  3.       3 int main(void)
  4.       4 {
  5.       5         chroot("/tmp");
  6.       6         printf("after chroot,getcwd is %s\n",getcwd(NULL,0));
  7.       7
  8.       8         chdir("/");
  9.       9         printf("after chdir /,getcwd is %s\n",getcwd(NULL,0));
  10.      10
  11.      11         return 0;
  12.      12 }
  13.      13
复制代码


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

论坛徽章:
0
2 [报告]
发表于 2004-11-23 08:05 |只看该作者

一个小程序的运行结果,不明白~~(getcwd和chroot函数)

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

论坛徽章:
0
3 [报告]
发表于 2004-11-23 08:50 |只看该作者

一个小程序的运行结果,不明白~~(getcwd和chroot函数)

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

论坛徽章:
0
4 [报告]
发表于 2004-11-23 09:05 |只看该作者

一个小程序的运行结果,不明白~~(getcwd和chroot函数)

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


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

论坛徽章:
0
5 [报告]
发表于 2004-11-23 09:08 |只看该作者

一个小程序的运行结果,不明白~~(getcwd和chroot函数)

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

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2004-11-23 09:14 |只看该作者

一个小程序的运行结果,不明白~~(getcwd和chroot函数)

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

  2.   int main(void)
  3.   {
  4.           char *pwd;
  5.           int ret;

  6.           ret = chroot("/tmp");
  7.           if(ret != 0) {
  8.              perror("chroot:");
  9.              exit(-1);
  10.          }
  11.          pwd = getcwd(NULL, 80);
  12.          printf("after chroot,getcwd is [%s]\n",pwd);
  13.          free(pwd);

  14.          chdir("/test");
  15.          pwd = getcwd(NULL, 80);
  16.          printf("after chdir /,getcwd is [%s]\n",pwd);
  17.          free(pwd);

  18.          return 0;
  19.   }
复制代码

论坛徽章:
208
巨蟹座
日期:2013-09-02 09:16:36卯兔
日期:2013-09-02 20:53:59酉鸡
日期:2013-09-05 21:21:45戌狗
日期:2013-10-15 20:51:17寅虎
日期:2013-10-18 21:13:16白羊座
日期:2013-10-23 21:15:19午马
日期:2013-10-25 21:22:48技术图书徽章
日期:2013-11-01 09:11:32双鱼座
日期:2013-11-01 20:29:44丑牛
日期:2013-11-01 20:40:00卯兔
日期:2013-11-11 09:21:32酉鸡
日期:2013-12-04 19:56:39
7 [报告]
发表于 2004-11-23 09:29 |只看该作者

一个小程序的运行结果,不明白~~(getcwd和chroot函数)

你的chroot肯定失败了

论坛徽章:
0
8 [报告]
发表于 2004-11-23 09:38 |只看该作者

一个小程序的运行结果,不明白~~(getcwd和chroot函数)

明白了!!多谢多谢!!

原来chroot之后的“/”符号,指的就是原来的/tmp路径了,真的很感谢:-)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP