2013-10-21 77 views
0

我已经看到了,我已经使用了几次函数cwd()来获取文件夹的绝对路径,但是有一个问题,那就是如果它可能与C得到只是文件夹的名称获取当前目录的名称(不是路径)

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

/home/sealcuadrado/work1/include 

如果我不给任何参数来我的节目,我会用cwd()和我肯定会去的绝对路径该文件夹。

但我想要的只是实际文件夹的名称,在这种情况下,包括。这可以在C(我已经看到在Python和C#中)完成?

+0

的名字永远是:'.'。你认为什么是文件系统根目录的名称? – alk

+0

根文件系统根目录的名称是'/'(又名'/ .'或'/ ..')。已装入文件系统的根目录的根目录名称是已装入文件系统的装入点的基本名称。当前目录的一个名字确实是'.',但这不完全是问题所要求的(更准确地说,标题应该是这样的:“获取父目录中标识当前目录的目录条目的名称“我怀疑你大部分都知道,但是OP可能不是, –

回答

2

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

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

+0

这个函数有点棘手,但这正是我正在寻找的内容,谢谢! – SealCuadrado

0

可以解析GETCWD的结果()

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; 
} 
+0

刚刚做了什么'printf(”%s \ n“, s + 1);'但是'memove(...)'? – alk

+0

@alk你说得对,我在帖子中加了这句话和其他一些东西。 – PhillipD

相关问题