chdir()

Updated: April 19, 2023

Change the current working directory

Synopsis:

#include <unistd.h>

int chdir( const char* path );

Arguments:

path
The new current working directory.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The chdir() function changes the current working directory to path, which can be relative to the current working directory or an absolute path name.

Note: There's only one current working directory per process. In a multithreaded application, any thread calling chdir() will change the current working directory for all threads in that process.

Returns:

0
Success.
-1
An error occurred (errno is set).

Errors:

EACCES
Search permission is denied for a component of path.
EINTR
The call was interrupted by a signal.
ELOOP
Too many levels of symbolic links or prefixes.
ENAMETOOLONG
The path argument is longer than PATH_MAX, or a pathname component is longer than NAME_MAX.
ENOENT
The specified path doesn't exist, or path is an empty string.
ENOMEM
There wasn't enough memory to allocate a control structure.
ENOSYS
The chdir() function isn't implemented for the filesystem underlying the path specified in path.
ENOTDIR
A component of path isn't a directory.

Examples:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main( int argc, char* argv[] )
{
    if( argc != 2 ) {
        fprintf( stderr, "Use: cd <directory>\n" );
        return EXIT_FAILURE;
    }

    if( chdir( argv[1] ) == 0 ) {
        printf( "Directory changed to %s\n", argv[1] );
        return EXIT_SUCCESS;
    } else {
        perror( argv[1] );
        return EXIT_FAILURE;
    }
}

Classification:

POSIX 1003.1

Safety:  
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes