NAME |LIBRARY |SYNOPSIS |DESCRIPTION |RETURN VALUE |ERRORS |STANDARDS |HISTORY |NOTES |SEE ALSO |COLOPHON | |
chdir(2) System Calls Manualchdir(2)chdir, fchdir - change working directory
Standard C library (libc,-lc)
#include <unistd.h>int chdir(const char *path);int fchdir(intfd); Feature Test Macro Requirements for glibc (seefeature_test_macros(7)):fchdir(): _XOPEN_SOURCE >= 500 || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L || /* glibc up to and including 2.19: */ _BSD_SOURCE
chdir() changes the current working directory of the calling process to the directory specified inpath.fchdir() is identical tochdir(); the only difference is that the directory is given as an open file descriptor.
On success, zero is returned. On error, -1 is returned, anderrno is set to indicate the error.
Depending on the filesystem, other errors can be returned. The more general errors forchdir() are listed below:EACCESSearch permission is denied for one of the components ofpath. (See alsopath_resolution(7).)EFAULTpath points outside your accessible address space.EIOAn I/O error occurred.ELOOPToo many symbolic links were encountered in resolvingpath.ENAMETOOLONGpath is too long.ENOENTThe directory specified inpath does not exist.ENOMEMInsufficient kernel memory was available.ENOTDIR A component ofpath is not a directory. The general errors forfchdir() are listed below:EACCESSearch permission was denied on the directory open onfd.EBADFfd is not a valid file descriptor.ENOTDIRfd does not refer to a directory.
POSIX.1-2008.
POSIX.1-2001, SVr4, 4.4BSD.
The current working directory is the starting point for interpreting relative pathnames (those not starting with '/'). A child process created viafork(2) inherits its parent's current working directory. The current working directory is left unchanged byexecve(2).
chroot(2),getcwd(3),path_resolution(7)
This page is part of theman-pages (Linux kernel and C library user-space interface documentation) project. Information about the project can be found at ⟨https://www.kernel.org/doc/man-pages/⟩. If you have a bug report for this manual page, see ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩. This page was obtained from the tarball man-pages-6.15.tar.gz fetched from ⟨https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/⟩ on 2025-08-11. If you discover any rendering problems in this HTML version of the page, or you believe there is a better or more up- to-date source for the page, or you have corrections or improvements to the information in this COLOPHON (which isnot part of the original manual page), send a mail to man-pages@man7.orgLinux man-pages 6.15 2025-05-17chdir(2)Pages that refer to this page:chroot(2), clone(2), open(2), pivot_root(2), rmdir(2), syscalls(2), unshare(2), dirfd(3), fts(3), ftw(3), getcwd(3), cpuset(7), landlock(7), path_resolution(7), pthreads(7), signal-safety(7)
HTML rendering created 2025-09-06 byMichael Kerrisk, author ofThe Linux Programming Interface. For details of in-depthLinux/UNIX system programming training courses that I teach, lookhere. Hosting byjambit GmbH. | ![]() |