getcwd()

2puT發表於2016-07-14


函式名稱:getcwd
外文名
getcwd
函式原型
char *getcwd
功 能
獲取當前工作目錄
標頭檔案
unistd.h

函式簡介

編輯

  
getcwdgetcwd
函式原型:char *getcwd( char *buffer, int maxlen );
功 能:獲取當前工作目錄
引數說明:getcwd()會將當前工作目錄的絕對路徑複製到引數buffer所指的記憶體空間中,引數maxlen為buffer的空間大小。
返 回 值:成功則返回當前工作目錄,失敗返回 FALSE
在某些 Unix 的變種下,如果任何父目錄沒有設定可讀或搜尋模式,即使當前目錄設定了,getcwd()還是會返回FALSE。有關模式與許可權的更多資訊見 chmod()。
標頭檔案:unistd.h(windows下為direct.h)

UNIX C函式

編輯
#include <unistd.h>
char *getcwd(char *buf, size_t size);
作用:把當前目錄的絕對地址儲存到 buf 中,buf 的大小為 size。如果 size太小無法儲存該地址,返回 NULL 並設定 errno 為 ERANGE。可以採取令 buf 為 NULL並使 size 為負值來使 getcwd 呼叫 malloc 動態給 buf 分配,但是這種情況要特別注意使用後釋放緩衝以防止記憶體洩漏。
程式例如果在程式執行的過程中,目錄被刪除(EINVAL錯誤)或者有關許可權發生了變化(EACCESS錯誤),getcwd也可能會返回NULL。

範例

編輯
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <unistd.h>
//標頭檔案在unix下是unistd.h,在TC2.0下是dir.h,在vc6.0定義在direct.h的標頭檔案,VS2008下是direct.h,應該依程式設計者的環境而定
int main(void)
{
 char buffer[MAXPATH];
 getcwd(buffer,MAXPATH);
 printf("The current directoryis:%s\n",buffer);
 return 0;
}

VC++6.0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <direct.h>
#include <stdlib.h>
int main(intargc,char*argv[])
{
 char path[_MAX_PATH];
 _getcwd(path,_MAX_PATH);
 printf("當前工作目錄:\n%s\n",path);
 if((_chdir("d:\\visualc++"))==0)
 {
  printf("修改工作路徑成功\n");
  _getcwd(path,_MAX_PATH);
  printf("當前工作目錄:\n%s\n",path);
 }
 else
 {
  perror("修改工作路徑失敗");
  exit(1);
 }
 return 0;
}

VS2008

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <direct.h>
#include <string.h>
#include <stdio.h>
int main(void)
{
 char *buffer;
 //得到當前的工作路徑
 if((buffer=_getcwd(NULL,0))==NULL)
  perror("_getcwderror");
 else
 {
  printf("%s\nLength:%d\n",buffer,strlen(buffer));
  free(buffer);
 }
}