所以这个程序应该打印一个目录下的所有文件信息。下面是我的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()
功能似乎不起作用。
谢谢!
答案 0 :(得分:0)
要获取长文件列表,命令为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
给exec
ls -la
{{1}}。{/ p} >