【问题标题】:how to show detailed file information under a directory in Linux Terminal? - C++如何在 Linux 终端中显示目录下的详细文件信息? - C++
【发布时间】:2015-03-16 02:31:31
【问题描述】:

所以这个程序应该打印一个目录下的所有文件信息。以下是我的 C++ 代码:

    #include <iostream>
    #include <unistd.h>
    #include <cstdio>
    #include <sys/types.h>

    using namespace std;

    int main(int argc, char *argv[]){
        execvp("/bin/ls",&argv[0]);
fork(); // should I put it here?
        perror("failed to execute the command");
        cout<< "The PID is " << getpid() <<endl;    
        return 0;
    }

我认为该命令应该是ls -a,但如何在程序中实现它?目前它只打印所有文件,而不是每个文件的信息。

另外,我如何打印 PID?因为getpid() 函数似乎不起作用。

谢谢!

【问题讨论】:

标签: c++ linux command-line


【解决方案1】:

要获得一长串文件,命令是ls -l。要同时包含隐藏文件(以. 开头的文件),命令为ls -a。这些当然可以组合成ls -la,它将给出给定目录中所有文件的长列表。

此外,使用您拥有的代码,execvp 调用之后的代码行将永远不会运行。当您调用exec 函数时,它会将当前正在运行的程序替换为您通过exec 调用的任何程序。如果您在调用execvp 之前放置cout 行,您应该会看到预期的输出。如果您想在调用execvp 后打印这些行,则需要使用fork,它实际上创建了您的程序的副本作为原始程序的子程序。 This 应该为您提供一些关于 fork 的好资源,如果这是您希望实现的功能类型。

要在 C 中正确调用 fork,您的代码将如下所示:

pid_t pid = fork();
if(pid == -1) //if there was an error
    ...
else if(pid > 0) //if child who resulted from the fork
    ...
else //if the parent who called the fork
    ...

我不确定你的意图,所以我会让你填写代码,但这是使用 fork 的一般意义。

要将参数传递给您的execvp 调用,您需要为其提供一个您已经在代码中执行的字符串数组。您将所有参数传递给execvp 调用,因此在编译后,运行./a.out -la 应该传递-la,从而为您提供exec 调用ls -la

【讨论】:

  • 我添加了分叉,但我做得对吗?另外,如何在 C++ 中执行 ls -a 或 ls -la 命令?谢谢。
  • 我已编辑我的答案以回答您的问题。为了更好地使用execvp 并为其提供参数(如-la),请查看此page,了解有关使用exec 系列函数的详细信息。
猜你喜欢
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多