如何在C中获取FreeBSD中进程的当前工作目录?

时间:2014-11-26 09:39:07

标签: c freebsd

目前我正在尝试将用C编写的终端模拟器从Linux移植到FreeBSD。 但终端尝试从父进程获取当前工作目录(CWD)。

通过访问/proc/$PID/cwd来实现此目的。

现在我正在寻找一种方法来替换FreeBSD上运行的功能。

那么如何从FreeBSD中的进程中获取CWD?

是否有符合POSIX标准的解决方案?

我知道我可以使用getcwd从我的进程获取CWD,但我需要父进程的CWD,我只知道PID。

1 个答案:

答案 0 :(得分:3)

嗯,实际上你有两种可能性。其中之一是使用shell实用程序,如lsof -pfstat -p(我在上面的评论中提到)或另一个名为procstat的实用程序,如here所述。使用procstat,解决方案将如下所示:

procstat -f <pid> | awk '$3 == "cwd" { print $10 }'

另一种可能的解决方案是使用libprocstat库调用,特别是procstat_getfiles()来获取C程序中的完整信息。请查看procstat sources以获取API使用示例。