我曾经看过,我曾经使用过几次函数cwd()
来获取文件夹的绝对路径,但是有一个问题,那就是如果C可以得到只是文件夹名称。
例如,假设我在此文件夹上执行程序:
/home/sealcuadrado/work1/include
如果我不给我的程序任何参数,我将使用cwd()
,我肯定会得到该文件夹的绝对路径。
但我想要的只是实际文件夹的名称,在本例中为 include 。这可以在C中完成(我在Python和C#中看到过)?
答案 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;
}