설명

특정 디렉토리를 루트 디렉토리 "/"로 지정합니다. 이 함수를 사용하는 이유는 특정 디렉토리 안에서만 작업을 한다면, 매우 긴 작업 디렉토리 이름 대신에 "/"로 짧게 사용할 수 있어서 작업이 편리합니다.

그러나 이 함수는 수퍼유저만 사용할 수 있습니다.

헤더 unistd.h
형태 int chroot(const char *path)
인수 char *path 루트 디렉토리로 지정할 디렉토리
반환 int 성공: 0, 실퍠: -1
예제

현재 작업 디렉토리를 "/"로 지정합니다. "/"로 지정하면 이후로 작업을 "/"를 기준으로 진행할 수 있습니다.

#include <stdio.h>
#include <unistd.h>
#include <pwd.h>
#include <sys/stat.h>

int main()
{
   int            fd;
   struct passwd *root_pw;

   if ( 0 != getuid())
   {
      printf( "수퍼유저만 사용할 수 있습니다.n");
      return -1;
   }
   if ( -1 == chroot( "."))
   {
      printf( "chroot() 실행 실패.n");
      return -1;
   }
   chdir( "/");
   mkdir( "test_dir_A", 0755);
   mkdir( "/test_dir_A/test_dir_B" ,0755);
}
]$ ./a.out
수퍼유저만 사용할 수 있습니다.
]$ su -
Password: 
]# ./a.out
]# ls -al
합계 24
drwxr-xr-x 3 jwjw jwjw 4096  9월 25 12:25 .
drwxr-xr-x 7 jwjw jwjw 4096  9월 25 06:20 ..
-rwxrwxr-x 1 jwjw jwjw 5223  9월 25 12:24 a.out
-rw-r--r-- 1 jwjw jwjw  469  9월 25 12:24 test.c
drwxr-xr-x 3 root root 4096  9월 25 12:25 test_dir_A
]# cd test_dir_A/
]# ls -al
합계 12
drwxr-xr-x 3 root root 4096  9월 25 12:25 .
drwxr-xr-x 3 jwjw jwjw 4096  9월 25 12:25 ..
drwxr-xr-x 2 root root 4096  9월 25 12:25 test_dir_B
]#