0

运行以下代码行并遇到我不确定的问题。主要思想是让用户输入要搜索的inode。一旦找到,打印与该 inode 关联的文件名,然后在该文件名上运行命令“stat”以生成有关该文件的信息。

#define COMMAND_LEN 1024
#define DATA_SIZE 1024

int main(int argc, char **argv) {
    FILE *pf;
    char command[COMMAND_LEN];
    char data[DATA_SIZE];
    char inode_data[DATA_SIZE];
    int iNode;

    printf("Enter inode: ");
    scanf(argv[0], iNode);

    sprintf(command, "find -inum %i -type f", iNode);
    pf = popen(command, "r");

    if(!pf){
        fprintf(stderr, "Could not open pipe for outlet.\n");
        return;
    }

    fgets(data, DATA_SIZE, pf);
    fprintf(stdout, "%s\n", data);

    sprintf(command, "stat %s", data);
    pf = popen(command, "r");
    fgets(inode_data, DATA_SIZE, pf);
    fprintf(stdout, "%s\n", inode_data);

    if (pclose(pf) != 0)
        fprintf(stderr, "Error: Failed to close command stream!\n");

    Return 0;
}

编译、运行并输入 inode 编号后,我会得到以下信息:

Enter inode: 148869

stat: missing operand
Try 'stat --help' for more information.

Error: Failed to close command stream!

从 sprintf 中的保存信息到变量中获得有用的帮助

4

2 回答 2

2

除非您在命令行参数中传递了格式字符串,否则不应scanf与参数一起使用。argv[0]此外,scanf 应该传递一个 int* 作为第二个参数,所以它确实是scanf("%d", &iNode);

于 2013-02-09T06:34:18.557 回答
0

如果您阅读find手册页,您会发现它需要一个搜索路径。您的find命令行中没有它。

您也没有正确读取用户的输入。argv[0]是您的程序的名称。您应该传递一个正确的格式字符串,例如

scanf("%s", iNode);

如果您使用调试器,甚至在 之后打印出输入scanf,您应该很快就看到了。

于 2013-02-09T06:34:09.087 回答