改变工作目录和根目录
进程有工作目录和根目录。
工作目录:进程在哪个路径下被运行起来哪个路径就是进程的工作目录(Current Woring Directory, CWD)
根目录:就是”/“
工作目录和根目录可以通过/proc/PID/cwd和/proc/PID/root进行查看

工作目录和根目录都可以进行更改,获取进程当前工作目录和改变进程工作目录的函数分别是:
1 |
|
buf参数指向的内存用于存储进程当前工作目录的绝对路径名,其大小由size参数指定。
如果当前工作目录的绝对路径的长度(再加上一个空结束字符“\0”)超过了size,则getcwd将返回NULL,并设置errno为ERANGE。
如果buf为NULL并且size非0,则getcwd可能在内部使用malloc动态分配内存,并将进程的当前工作目录存储在其中。如果是这种情况,则我们必须自己来释放getcwd在内部创建的这块内存。
getcwd函数成功时返回一个指向目标存储区(buf指向的缓存区或是getcwd在内部动态创建的缓存区)的指针,失败则返回NULL并设置errno。
chdir函数的path参数指定要切换到的目标目录。它成功时返回0,失败时返回-1并设置errno。
改变进程根目录可以使用chroot:
1 |
|
path参数指定要切换到的目标根目录。它成功时返回0,失败时返回-1并设置errno。
chroot并不改变进程的当前工作目录。
改变进程的根目录之后,程序可能无法访问类似/dev的文件(和目录),因为这些文件(和目录〉并非处于新的根目录之下。不过好在调用chroot之后,进程原先打开的文件描述符依然生效,所以我们可以利用这些早先打开的文件描述符来访问调用chroot之后不能直接访问的文件(和目录),尤其是一些日志文件。此外,只有特权进程才能改变根目录。