프로그램이 시작된 디렉토리를 가져와야하는 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
.
답변
질문에 유닉스 태그가 붙어 있지만 대상 플랫폼이 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;
}