【发布时间】:2018-02-14 02:37:52
【问题描述】:
我正在尝试从 C 中的 /proc/pid/cmdline 获取包含 PID 可执行文件的路径。手册页指出:
"命令行参数出现 在此文件中作为一组由空字节分隔的字符串 ('\0'),在最后一个字符串之后有一个空字节。”
我的想法(伪代码):
int main(int argc, char** argv){
// Assume file_path has been initialized
char executable_path[1000];
FILE* file = fopen(file_path, "r");
if(f != NULL){
fscanf("%s", executable_path);
}
return 0;
}
因为我只想要这个文件中的第一个字符串(因为那是包含可执行文件的路径)并且我确定第一个字符串后面有一个 '\0',所以 fscanf 是正确的函数吗?它会检测到第一个'\0',然后将整个字符串存储到可执行文件路径数组中的第一个'\0'吗? (注意:我不需要提取任何其他字符串)。
谢谢!
【问题讨论】:
-
你的问题包含代码你试过了吗?结果如何?我的预感(我没有检查文档)是 scanf 不会在 %s 的 \0 上终止。如果我没记错的话,它只会在空白处终止。
-
您可以轻松地将this answer 中的
get_argv()函数(读取为/proc/self/cmdline)改为读取/proc/PID/cmdline。但是,如果您只对可执行文件感兴趣,请在/proc/PID/exe上使用readlink()。 -
@NominalAnimal 我不允许使用 readlink() 或任何系统调用。如果路径后面有参数,我将如何只获取路径?
-
@Bill:
readlink()不是系统调用,它是标准的 POSIX.1 C 函数,用于获取符号链接指向的路径。