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

Rap*_*ens 5 c freebsd

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

它通过访问/proc/$PID/cwd.

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

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

甚至有符合 POSIX 的解决方案吗?

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

use*_*253 5

嗯,实际上你有两种可能性。其中之一是使用 shell 实用程序,如lsof -p, fstat -p(正如我在上面的评论中提到的那样)或另一个命名procstathere 的实用程序。随着procstat该解决方案将是这样的:

procstat -f <pid> | awk '$3 == "cwd" { print $10 }'
Run Code Online (Sandbox Code Playgroud)

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