web-dev-qa-db-ja.com

Cプログラムで現在のディレクトリを取得する方法は?

私は、プログラムが開始されたディレクトリを取得する必要があるCプログラムを作成しています。このプログラムは、UNIXコンピューター用に作成されています。私はopendir()telldir()を見てきましたが、telldir()off_t (long int)を返すため、実際には役に立ちません。

文字列(char配列)で現在のパスを取得するにはどうすればよいですか?

146
Stian

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

getcwdのmanページを検索してください。

60
CAdaker

質問にはUnixというタグが付けられていますが、ターゲットプラットフォームがWindowsの場合にも人々は質問にアクセスします。Windowsの答えは GetCurrentDirectory() 関数です。

DWORD WINAPI GetCurrentDirectory(
  _In_  DWORD  nBufferLength,
  _Out_ LPTSTR lpBuffer
);

これらの答えは、CコードとC++コードの両方に当てはまります。

ser4581301 で提案されたリンクは comment で別の質問に追加され、Google検索「site:Microsoft.com getcurrentdirectory」で現在の最上位の選択肢として確認されています。

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

getcwd(3)はMicrosoftのlibc: getcwd(3) でも利用可能であり、期待どおりに動作することに注意してください。

-loldnames(oldnames.lib、ほとんどの場合自動的に行われます)とリンクするか、_getcwd()を使用する必要があります。プレフィックスなしのバージョンは、Windows RTでは使用できません。

1
rvx