如何在 Linux 终端中显示目录下的详细文件信息? - C++
how to show detailed file information under a directory in Linux Terminal? - C++
所以这个程序应该打印目录下的所有文件信息。下面是我的 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
函数时,它会将当前的 运行ning 程序替换为您通过 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
调用,因此在编译后,运行ning ./a.out -la
应该传递 -la
给您 exec
调用 ls -la
.
所以这个程序应该打印目录下的所有文件信息。下面是我的 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
函数时,它会将当前的 运行ning 程序替换为您通过 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
调用,因此在编译后,运行ning ./a.out -la
应该传递 -la
给您 exec
调用 ls -la
.