如何获得当前目录路径
在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读取它的源路径就可以获取当前程序的绝对路径。
浙公网安备 33010602011771号