如何获得当前目录路径

 

在shell中可以利用dirname、basename等相关函数来获取目录或文件名等操作。
 
#获取当前脚本所在绝对路径
cur_dir=$(cd "$(dirname "$0")"; pwd)
 
在C语言中,可以有多个函数可以用于获取目录的操作。
方法一:用realpath函数。这种方法用于开机启动程序获取自身目录会出错。
char current_absolute_path[MAX_SIZE];
//获取当前目录绝对路径
if (NULL == realpath("./", current_absolute_path))
{
    printf("***Error***\n");
    exit(-1);
}
strcat(current_absolute_path, "/");
printf("current absolute path:%s\n", current_absolute_path);
方法二:用getcwd函数。这种方法用于开机启动程序获取自身目录会出错。
char current_absolute_path[MAX_SIZE];
//获取当前目录绝对路径
if (NULL == getcwd(current_absolute_path, MAX_SIZE))
{
    printf("***Error***\n");
    exit(-1);
}
printf("current absolute path:%s\n", current_absolute_path);
另外,与getcwd还有几个相关的函数:
#include <unistd.h>
char *getcwd(char *buf, size_t size);
char *getwd(char *buf);
char *get_current_dir_name(void);
第一个比较常用,其中buf是缓存,用于存储得到的路径,size是buf的大小。
第二个函数中和第一个类似,但是默认的size是采用PATH_MAX
第三个和前两个不同的是,前两个都是调用者已经分配好了内存buf,而这个函数使用malloc来根据路径的长度进行内存的分配。所以,在使用的时候,注意要利用free进行释放内存。
 
方法三:用readlink函数。这种方法最可靠,可用于开机启动程序获取自身目录。
char current_absolute_path[MAX_SIZE];
//获取当前程序绝对路径
int cnt = readlink("/proc/self/exe", current_absolute_path, MAX_SIZE);
if (cnt < 0 || cnt >= MAX_SIZE)
{
    printf("***Error***\n");
    exit(-1);
}
//获取当前目录绝对路径,即去掉程序名
int i;
for (i = cnt; i >=0; --i)
{
    if (current_absolute_path[i] == '/')
    {
        current_absolute_path[i+1] = '\0';
        break;
    }
}
printf("current absolute path:%s\n", current_absolute_path);
这种方法的原理在于linux系统中的符号链接:/proc/self/exe代表当前程序,所以可以用readlink读取它的源路径就可以获取当前程序的绝对路径。
posted @ 2017-02-11 17:08  Mr.Rico  阅读(1010)  评论(0)    收藏  举报