如何在Linux终端的目录下显示详细的文件信息?-C++

how to show detailed file information under a directory in Linux Terminal? - C++

本文关键字:文件 信息 -C++ 显示 Linux 终端      更新时间:2023-10-16

所以这个程序应该打印目录下的所有文件信息。下面是我的 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()功能似乎不起作用。

谢谢!

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

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