【发布时间】:2017-11-17 21:52:33
【问题描述】:
我正在尝试打印给定 inode 编号的文件名。我正在使用execlp 系统调用来运行find 命令。我的代码如下所示:
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
char str[8];
char *ptr;
ptr=str;
long x=9306140;
snprintf(str,8,"%ld", x);
execlp("find"," ","~"," ","-inum"," ",str,NULL);
}
但我收到一个错误:-inum 的参数“9306140”无效。 有人可以帮忙吗?
【问题讨论】:
-
你不想要
” “参数。 shell 使用空格来分隔字符串中的参数,但通常不会将它们传递给命令。find命令不会抱怨前两个,因为它只是将它们视为文件/目录名称。它以某种方式将-inum之后的那个解释为inode 号;那么它对数字没有意义。您还需要确保分配了足够的空间来格式化数字。 -
当我删除 " " 参数时,即使存在具有该 inode 的文件,它也会编译但不打印任何内容
-
能否详细说明“分配足够的空间来格式化数字”
-
shell 在运行命令之前扩展
~。您需要使用char *home = getenv(“HOME”);并通过home代替”~”。 -
'足够的空间' - 对于给定的 inode 编号,您是安全的,但概括代码可能会遇到空间不足的问题。您即将拥有一个 8 位数字;如果要增加,您需要更多空间。
标签: c