GNU/Linux >> Linux の 問題 >  >> Linux

CからLinuxで現在のファイル(pwd)へのパスを取得する方法は?

ディレクトリを開いて読み取るだけでは、現在の作業ディレクトリは変更されません。ただし、プログラム内のディレクトリを変更すると、.

参考までに、<​​/P>

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

int main() {
    char cwd[1024];
    chdir("/path/to/change/directory/to");
    getcwd(cwd, sizeof(cwd));
    printf("Current working dir: %s\n", cwd);
}

POSIX システムの場合、私は 3 つの解決策を見つけました:

環境変数「PWD」から値を取得

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

#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;
}

結果:

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

getcwd() を使用

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

#ifdef __unix__
    #define IS_POSIX 1
    #include <unistd.h>
#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;
}

結果

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

システム コマンド「pwd」を実行し、出力を読み取る

#ifdef __unix__
    #define IS_POSIX 1
    #define _BSD_SOURCE
#else
    #define IS_POSIX 0
#endif

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


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;
}

結果:

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

chdir(2) を使用して dir を C から変更し、次に system("pwd"); を使用できます どんなディレクトリでも chdir くれます した。

pwd の C 相当 -コマンドは getcwd(3) です。


Linux
  1. Cを使用してLinuxでCPUの数を取得するには?

  2. LinuxでCからIPアドレスを設定する方法

  3. ターミナルウィンドウからLinuxでファイルを作成するには?

  1. Linux:システムからすべてのログインログを取得する方法は?

  2. Linux –前日にSarを表示するにはどうすればよいですか?

  3. Javaを使用してLinux環境からTomcatの現在のディレクトリの相対パスを取得する方法

  1. Linux コマンド ラインからビデオ ファイルの解像度 (幅と高さ) を取得するにはどうすればよいですか?

  2. ファイルのフルパスを取得するには?

  3. Linux で .so ファイルを java.library.path に追加する方法