답변:
봤어 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;
}
int main()
이어야한다 int main(void)
.
char cwd[PATH_MAX+1]
. 또는 당신은 버퍼로 성가 시게 할 수없는 경우 만 char *buf=getcwd(NULL,0);
하면 모든 작업이 완료 될 때 free(buf)
(POSIX.1-2001 현재)
에 대한 매뉴얼 페이지를 찾아보십시오 getcwd
.
man 3 getcwd
. 농담은 제쳐두고, 무정부 상태가되어서는 안된다.이 포스트는 '08 년부터 발간되었다.
질문에 유닉스 태그가 붙어 있지만 대상 플랫폼이 Windows 일 때 사람들이 방문하여 Windows에 대한 답이 GetCurrentDirectory()
함수입니다.
DWORD WINAPI GetCurrentDirectory(
_In_ DWORD nBufferLength,
_Out_ LPTSTR lpBuffer
);
이 답변은 C 및 C ++ 코드 모두에 적용됩니다.
user4581301 이 다른 질문 에 대한 의견 으로 제안한 링크를 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)
또한 마이크로 소프트의 libc의로 볼 수 있습니다 : (3)에 getcwd , 당신이 기대하는 것과 동일한 방식으로 작동합니다.
-loldnames
(대부분의 경우 자동으로 수행되는 oldnames.lib) 와 연결 하거나을 사용해야 _getcwd()
합니다. 접두사가없는 버전은 Windows RT에서 사용할 수 없습니다.
현재 디렉토리 (대상 프로그램을 실행하는 위치)를 가져 오려면 Visual Studio 및 Linux / MacOS (gcc / clang), C 및 C ++ 모두에서 작동하는 다음 예제 코드를 사용할 수 있습니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#if defined(_MSC_VER)
#include <direct.h>
#define getcwd _getcwd
#elif defined(__GNUC__)
#include <unistd.h>
#endif
int main() {
char* buffer;
if( (buffer=getcwd(NULL, 0)) == NULL) {
perror("failed to get current directory\n");
} else {
printf("%s \nLength: %zu\n", buffer, strlen(buffer));
free(buffer);
}
return 0;
}