linux 路径分割

来源:互联网 发布:ubuntu交叉编译链路径 编辑:程序博客网 时间:2024/06/06 01:55

linux 路径分割

(1) 获得当前工作目录的绝对路径

获取当前工作目录是使用函数:getcwd。cwd指的是“current working directory”,这样就好记忆了。
函数说明:
    函数原型:char* getcwd(char* buffer, int len);
    参数:buffer是指将当前工作目录的绝对路径copy到buffer所指的内存空间, len是buffer的长度。
    返回值:获取成功则返回当前工作目录(绝对路径),失败则返回false(即NULL)。 
    该函数所属头文件为<direct.h>

具体使用如下例:(特别注意的是,当你使用的是Linux系统时,请注意你是否具有相关的权限,如果权限不够会导致获取失败)
#include <stdio.h>#include <direct.h>int main(){char *buffer;//也可以将buffer作为输出参数if((buffer = getcwd(NULL, 0)) == NULL){perror("getcwd error");}else{        printf("%s\n", buffer);free(buffer);}}

(2)linux下,分解路径

http://www.tuicool.com/articles/INjYrqv
在做移植时, 发现了 _splitpath 在 linux 下是没有的,于是决定自己写下,也不难。
首先 百科 到如下内容:
声明定义
void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext );
分解路径,把你的完整路径给分割开来,就是一个对字符串进行分割的函数
path, Full path(完整路径)
drive , Optional drive letter, followed by a colon (:)( 磁盘驱动 包含:)
dir, Optional directory path, including trailing slash. Forward slashes (/ ), backslashes (\ ), or both may be used.(文件路径,无论是以“/”,“\”)
fname, Base filename (no extension)(文件名)
ext , Optional filename extension, including leading period (.)(后缀名)
---------------------------------------- 分割线出没,请小心

Linux 下实现及测试代码如下:

#include <stdio.h>#include <string.h>#ifndef WIN32void _splitpath(const char *path, char *drive, char *dir, char *fname, char *ext);static void _split_whole_name(const char *whole_name, char *fname, char *ext);#endif/* main test */int main(void){  char *path = "/home/test/dir/f123.txt";  // char *path = "/home/test/dir/123.txt";  // char *path = "/home/test/dir/123";  // char *path = "123";  // char *path = "123.txt";  char drive[128];  char dir[128];  char fname[128];  char ext[128];  _splitpath(path, drive, dir, fname, ext);  printf("path  = %s\n", path);  printf("dir   = %s\n", dir);  printf("fname = %s\n", fname);  printf("ext   = %s\n", ext);    return 0;}#ifndef WIN32void _splitpath(const char *path, char *drive, char *dir, char *fname, char *ext){  char *p_whole_name;  drive[0] = '\0';  if (NULL == path)  {    dir[0] = '\0';    fname[0] = '\0';    ext[0] = '\0';    return;  }  if ('/' == path[strlen(path)])  {    strcpy(dir, path);    fname[0] = '\0';    ext[0] = '\0';    return;  }  p_whole_name = rindex(path, '/');  if (NULL != p_whole_name)  {    p_whole_name++;    _split_whole_name(p_whole_name, fname, ext);    snprintf(dir, p_whole_name - path, "%s", path);  }  else  {    _split_whole_name(path, fname, ext);    dir[0] = '\0';  }}static void _split_whole_name(const char *whole_name, char *fname, char *ext){  char *p_ext;  p_ext = rindex(whole_name, '.');  if (NULL != p_ext)  {    strcpy(ext, p_ext);    snprintf(fname, p_ext - whole_name + 1, "%s", whole_name);  }  else  {    ext[0] = '\0';    strcpy(fname, whole_name);  }}#endif


0 0