<分区>
在我们的应用程序中,我们调用 getcwd(3)
来获取当前工作目录。
当进程开始运行时,如果有人删除了目录路径,则进程正在运行,但 getcwd
API 失败(返回 NULL
)。
例子:
进程名称是:a.exe
存在于 /root/appl/a.exe
中
运行 a.exe
后,如果当前工作目录被删除,getcwd(3)
api 将失败。
getcwd(3)
是否有任何替代 API 来了解进程的当前工作目录,即使目录路径已删除?
标签 c linux api system-calls getcwd
<分区>
在我们的应用程序中,我们调用 getcwd(3)
来获取当前工作目录。
当进程开始运行时,如果有人删除了目录路径,则进程正在运行,但 getcwd
API 失败(返回 NULL
)。
例子:
进程名称是:a.exe
存在于 /root/appl/a.exe
中
运行 a.exe
后,如果当前工作目录被删除,getcwd(3)
api 将失败。
getcwd(3)
是否有任何替代 API 来了解进程的当前工作目录,即使目录路径已删除?
最佳答案
我不完全确定您将如何当前工作目录的结果,因为该目录将仅在打开时继续存在-- 你不能在目录中创建新文件,它必须是空的,这样它才能被删除 -- 但你可以在 /proc/self/cwd
发现名称:
$ mkdir syedsma
$ cd syedsma/
$ /tmp/proccwd
/proc/self/cwd reports: /tmp/syedsma
$ /tmp/getcwd
getcwd: /tmp/syedsma
$ rmdir ../syedsma/
$ /tmp/getcwd
getcwd failed: No such file or directory
$ /tmp/proccwd
/proc/self/cwd reports: /tmp/syedsma (deleted)
$
这是我的getcwd.c
:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char* argv[]) {
char p[1000];
char *r;
r = getcwd(p, sizeof(p));
if (!r)
perror("getcwd failed");
else
printf("getcwd: %s\n", p);
return 0;
}
这是我的proccwd.c
:
#include <stdio.h>
#include <unistd.h>
#include <limits.h>
int main(int argc, char* argv[]) {
char buf[PATH_MAX];
ssize_t r = readlink("/proc/self/cwd", buf, sizeof(buf));
if (r < 0) {
perror("readlink /proc/self/cwd failed");
return 1;
} else {
buf[PATH_MAX-1] = '\0';
printf("/proc/self/cwd reports: %s\n", buf);
}
return 0;
}
mu is too short如果它是一个守护进程,他对 chdir("/");
的建议是正确的——我可以想象你可能有充分的理由让你的程序知道它当前的工作目录,甚至知道路径名如果仍然存在的话可能是什么——但一般来说,您不应该在意。路径名 "."
几乎适用于需要当前工作目录的所有情况,直到您需要为用户。
关于c - getcwd 是否有任何替代 API 来获取进程的工作目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6464073/