c - 不打印C中的Inode文件名或头信息

标签 c project printf inode

运行以下代码行并遇到我不确定的问题。主要思想是用户输入要搜索的 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!

从之前的问题帖子Save information from sprintf to a variable中获得了有用的帮助

最佳答案

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

关于c - 不打印C中的Inode文件名或头信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14785603/

相关文章:

c++ - 如何使用 C++ (keybd_event) 发送 unicode 键

c - C语言中为什么char是1个字节

C - 循环、<math.h> 和 float

c# - 合并 2 个 VS 项目 - 如何更改起始 .exe 文件?

c++ - 当 std::fprintf(stderr,...) 失败时,操作是没有效果还是可以在失败前写一点?

go - 如何在 Go 中打印 "enum"的字符串表示形式?

c# - 位移和数据解释

java - 谁能帮我画一个 Arduino 草图来控制电机运行?

php - 为大型公司在 phpmyadmin 中创建大型 Web 应用程序

c - 用 C 语言打印和扫描