How to get the path to the current file (pwd) in Linux from C?

前端 未结 5 1396
走了就别回头了
走了就别回头了 2021-02-09 16:30

I\'d like to know if it is somehow possible to run system("pwd") on the current DIR. So for example let\'s have this folder structure:

exam         


        
5条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2021-02-09 17:04

    For POSIX systems I found three solutions:

    Get value from an environment variables "PWD"

    #include 
    #include 
    
    #ifdef __unix__
        #define IS_POSIX 1
    #else
        #define IS_POSIX 0
    #endif
    
    
    int main (int argv, char **argc)
    {
        if (IS_POSIX == 1) {
            puts("Path info by use environment variable PWD:");
            printf("\tWorkdir: %s\n", getenv("PWD"));
            printf("\tFilepath: %s/%s\n", getenv("PWD"), __FILE__);
        }
        return 0;
    }
    

    Result:

    Path info by use environment variable PWD:
        Workdir: /media/setivolkylany/WorkDisk/Programming/Projects/c-utils
        Filepath: /media/setivolkylany/WorkDisk/Programming/Projects/c-utils/main.c
    

    Use getcwd()

    #include 
    #include 
    
    #ifdef __unix__
        #define IS_POSIX 1
        #include 
    #else
        #define IS_POSIX 0
    #endif
    
    
    int main (int argv, char **argc)
    {
        if (IS_POSIX == 1) {
            char cwd[1024];
            getcwd(cwd, sizeof(cwd));
            puts("Path info by use getcwd():");
            printf("\tWorkdir: %s\n", cwd);
            printf("\tFilepath: %s/%s\n", cwd, __FILE__);
        }
        return 0;
    }
    

    Result

    Path info by use getcwd():
        Workdir: /media/setivolkylany/WorkDisk/Programming/Projects/c-utils
        Filepath: /media/setivolkylany/WorkDisk/Programming/Projects/c-utils/main.c
    

    Execute system command "pwd" and read output

    #ifdef __unix__
        #define IS_POSIX 1
        #define _BSD_SOURCE
    #else
        #define IS_POSIX 0
    #endif
    
    #include 
    #include 
    #include 
    
    
    int main (int argv, char **argc)
    {
        if (IS_POSIX == 1) {
            char buffer[500];
            FILE *output;
    
            // read output of a command
            output = popen("/bin/pwd", "r");
            char *pwd = fgets(buffer, sizeof(buffer), output);
    
            // strip '\n' on ending of a line
            pwd = strtok(pwd, "\n");
    
            puts("Path info by execute shell command 'pwd':");
            printf("\tWorkdir: %s\n", pwd);
            printf("\tFilepath: %s/%s\n", pwd, __FILE__);
        }
        return 0;
    }
    

    Result:

    Path info by execute shell command 'pwd':
        Workdir: /media/setivolkylany/WorkDisk/Programming/Projects/c-utils
        Filepath: /media/setivolkylany/WorkDisk/Programming/Projects/c-utils/main.c
    

提交回复
热议问题