gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:43:01 24 4
gpt4 key购买 nike

所以这个程序应该打印一个目录下的所有文件信息。下面是我的 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,这实际上会创建程序的拷贝作为原始程序的子程序。 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,为您提供对 ls -laexec 调用。

关于c++ - 如何在Linux终端中显示目录下的详细文件信息? - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29068787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com