GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mendapatkan path ke file saat ini (pwd) di Linux dari C?

Cukup membuka dan membaca direktori tidak mengubah direktori kerja saat ini. Namun, mengubah direktori dalam program Anda akan.

untuk referensi,

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

Untuk sistem POSIX saya menemukan tiga solusi:

Dapatkan nilai dari variabel lingkungan "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;
}

Hasil:

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

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

Hasil

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

Jalankan perintah sistem "pwd" dan baca keluaran

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

Hasil:

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

Anda dapat menggunakan chdir(2) untuk mengubah dir dari C, lalu system("pwd"); akan memberi Anda direktori apa pun yang Anda chdir harus.

C-setara dengan pwd -perintah adalah getcwd(3).


Linux
  1. Bagaimana saya bisa mendapatkan resolusi (lebar dan tinggi) untuk file video dari baris perintah linux?

  2. Bagaimana cara mendapatkan jumlah CPU di Linux menggunakan C?

  3. Bagaimana cara mendapatkan path lengkap dari suatu file?

  1. cara mendapatkan jalur relatif direktori saat ini di kucing jantan dari lingkungan linux menggunakan java

  2. Bagaimana cara mendapatkan URL file Dropbox dari baris perintah?

  3. Bagaimana cara mendapatkan netmask dari bash?

  1. Linux:Bagaimana Mendapatkan Semua Log Masuk Dari Sistem?

  2. Linux – Bagaimana Cara Menampilkan Sar Untuk Hari Sebelumnya?

  3. Bagaimana cara mendapatkan ukuran fisik file di Linux?