chroot() - Unix,Linux系统调用 - 技术教程
Tutorials Point


  Unix入门
  Unix Shell编程
  高级Unix
  Unix有用参考
  Unix有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考资料     讨论区     关于TP  

chroot() - Unix,Linux系统调用


previous next AddThis Social Bookmark Button

广告

名称

chroot - 更改根目录

概要

#include <unistd.h> 

int chroot(const char *path);

描述

chroot() 将根目录更改为path中指定目录。此目录将用于以/开头的路径名。根目录由当前进程的所有子进程继承。

只有特权进程(Linux:具有CAP_SYS_CHROOT功能的进程)才能调用chroot(2)。此调用更改路径名解析过程中的一个组成部分,而不会执行其他操作。

此调用不会更改当前工作目录,因此调用后“.”可能位于以“/”为根的树之外。特别是,超级用户可以通过执行“mkdir foo; chroot foo; cd ..”来逃脱“chroot监狱”。

此调用不会关闭打开的文件描述符,并且此类文件描述符可能允许访问chroot树外的文件。

返回值

成功时,返回零。发生错误时,返回 -1,并且errno被相应地设置。

错误

根据文件系统,可能会返回其他错误。下面列出了更常见的错误

错误代码描述
EACCES 路径前缀的组件被拒绝搜索权限。(另请参见path_resolution(2)。)
EFAULT path 指向您可访问的地址空间之外。
EIO 发生I/O错误。
ELOOP 在解析path时遇到太多符号链接。
ENAMETOOLONG path 太长。
ENOENT 文件不存在。
ENOMEM 内核内存不足。
ENOTDIR path 的一个组件不是目录。
EPERM 调用者权限不足。

符合标准

SVr4、4.4BSD、SUSv2(标记为LEGACY)。此函数不是POSIX.1-2001的一部分。

备注

通过fork(2)创建的子进程继承其父进程的根目录。根目录不会被execve(2)更改。

FreeBSD 有一个更强大的jail() 系统调用。

参见



previous next Printer Friendly

广告


  

广告



广告
© . All rights reserved.