私は、プログラムが開始されたディレクトリを取得する必要があるCプログラムを作成しています。このプログラムは、UNIXコンピューター用に作成されています。私はopendir()
とtelldir()
を見てきましたが、telldir()
はoff_t (long int)
を返すため、実際には役に立ちません。
文字列(char配列)で現在のパスを取得するにはどうすればよいですか?
getcwd()
を見たことがありますか?
#include <unistd.h>
char *getcwd(char *buf, size_t size);
簡単な例:
#include <unistd.h>
#include <stdio.h>
#include <limits.h>
int main() {
char cwd[PATH_MAX];
if (getcwd(cwd, sizeof(cwd)) != NULL) {
printf("Current working dir: %s\n", cwd);
} else {
perror("getcwd() error");
return 1;
}
return 0;
}
getcwd
のmanページを検索してください。
質問にはUnixというタグが付けられていますが、ターゲットプラットフォームがWindowsの場合にも人々は質問にアクセスします。Windowsの答えは GetCurrentDirectory()
関数です。
DWORD WINAPI GetCurrentDirectory(
_In_ DWORD nBufferLength,
_Out_ LPTSTR lpBuffer
);
これらの答えは、CコードとC++コードの両方に当てはまります。
ser4581301 で提案されたリンクは comment で別の質問に追加され、Google検索「site:Microsoft.com getcurrentdirectory」で現在の最上位の選択肢として確認されています。
#include <stdio.h> /* defines FILENAME_MAX */
//#define WINDOWS /* uncomment this line to use it for windows.*/
#ifdef WINDOWS
#include <direct.h>
#define GetCurrentDir _getcwd
#else
#include <unistd.h>
#define GetCurrentDir getcwd
#endif
int main(){
char buff[FILENAME_MAX];
GetCurrentDir( buff, FILENAME_MAX );
printf("Current working dir: %s\n", buff);
return 1;
}
getcwd(3)
はMicrosoftのlibc: getcwd(3) でも利用可能であり、期待どおりに動作することに注意してください。
-loldnames
(oldnames.lib、ほとんどの場合自動的に行われます)とリンクするか、_getcwd()
を使用する必要があります。プレフィックスなしのバージョンは、Windows RTでは使用できません。