首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Linux终端中显示目录下的详细文件信息?- C++

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

Stack Overflow用户
提问于 2015-03-16 02:31:31
回答 1查看 819关注 0票数 0

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

代码语言:javascript
复制
    #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()函数似乎不起作用。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-16 02:58:28

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

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

要在C中正确调用叉,代码如下所示:

代码语言:javascript
复制
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
    ...

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

要将参数传递给您的execvp调用,您可以为它提供一个字符串数组,您已经在代码中这样做了。您要将所有参数传递给execvp调用,所以在编译之后,运行./a.out -la应该传递给-la,给您一个对ls -la的exec调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29068787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档