Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mendapatkan Direktori Pelaksanaan Program C/C Saya Merentas Platform Berbeza?

Bagaimanakah Saya Boleh Mendapatkan Direktori Pelaksanaan Program C/C Saya Merentas Platform Berbeza?

Susan Sarandon
Susan Sarandonasal
2024-12-24 17:49:09925semak imbas

How Can I Get the Execution Directory of My C/C   Program Across Different Platforms?

Menentukan Direktori Program

Dalam C/C , mendapatkan laluan penuh ke direktori dari mana program dijalankan boleh menjadi cabaran untuk aplikasi merentas platform. Artikel ini menangani isu ini, menyediakan penyelesaian yang memenuhi platform dan sistem fail yang berbeza.

Pendekatan Platform-Agnostik

Malangnya, tiada fungsi perpustakaan C/C standard yang mengembalikan laluan direktori program dalam cara platform-agnostik. Walau bagaimanapun, menggunakan API khusus sistem pengendalian boleh mencapai hasil ini.

Windows

Pada Windows, fungsi GetModuleFileName boleh mendapatkan semula laluan penuh ke modul (fail boleh laku).

char pBuf[256];
size_t len = sizeof(pBuf);
int bytes = GetModuleFileName(NULL, pBuf, len);
if (bytes) {
    return bytes;
} else {
    return -1; // Error
}

Linux

Untuk sistem Linux, fungsi pautan baca boleh mengakses pautan simbolik dalam "/proc/self/exe" untuk menentukan laluan fail boleh laku program.

char pBuf[256];
size_t len = sizeof(pBuf);
int bytes = MIN(readlink("/proc/self/exe", pBuf, len), len - 1);
if (bytes >= 0) {
    pBuf[bytes] = '';
    return bytes;
} else {
    return -1; // Error
}

Perhatikan bahawa pendekatan ini khusus untuk platform dan sistem fail tertentu. Jika anda memerlukan penyelesaian yang lebih komprehensif, pertimbangkan untuk menggunakan perpustakaan merentas platform seperti Boost.filesystem atau Qt.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Direktori Pelaksanaan Program C/C Saya Merentas Platform Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn