获取当前目录的名称(不是路径)

时间:2013-10-21 15:09:51

标签: c system-calls getcwd

我曾经看过,我曾经使用过几次函数cwd()来获取文件夹的绝对路径,但是有一个问题,那就是如果C可以得到只是文件夹名称

例如,假设我在此文件夹上执行程序:

/home/sealcuadrado/work1/include

如果我不给我的程序任何参数,我将使用cwd(),我肯定会得到该文件夹​​的绝对路径。

但我想要的只是实际文件夹的名称,在本例中为 include 。这可以在C中完成(我在Python和C#中看到过)?

3 个答案:

答案 0 :(得分:2)

应用basename()  函数为getcwd()的结果。

另一种方法是弄乱获取当前目录(.)的inode编号,然后打开并扫描父目录(..),查找具有相应inode编号的名称。如果父目录包含NFS自动挂载点(例如,主目录),则会变得棘手;如果你不小心(这很慢并且几乎没有意义),你最终可能会自动安装大量的文件系统。

答案 1 :(得分:0)

你可以解析getcwd()

的结果

答案 2 :(得分:0)

也许不是最优雅的方式,但这应该通过使用strchr()和memmove()的组合来工作。

#include <stdio.h>
#include <string.h>

int main() {
  char *s;
  char buf[] = "/home/folder/include";

  s = strrchr (buf, '/');

  if (s != NULL) {
    memmove(s, s+1, strlen(s+1)+1);
    printf ("%s\n", s);
  }
 return 0;
}

打印include

编辑:以下代码更好,并且还调用getcwd()

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

int main() {

char buffer[200];   
char *s;

getcwd(buffer,sizeof(buffer));

s = strrchr(buffer, '/');

if (s != NULL) {
    printf ("%s\n", s+1);
}
return 0;
}