所以这个程序应该在一个目录下打印所有的文件信息。下面是我的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()函数似乎不起作用。
谢谢!
发布于 2015-03-16 02:58:28
要获得文件的长列表,命令是ls -l。要同时包含隐藏文件(那些以.开头的文件),命令是ls -a。当然,这些文件可以合并到ls -la中,这将给出给定目录中所有文件的长列表。
此外,使用您所拥有的代码,execvp调用后的代码行将永远不会运行。当您调用exec函数时,它会将当前运行的程序替换为您通过exec调用的任何内容。如果将cout行放在调用execvp之前,就会看到预期的输出。如果您想在调用execvp之后打印这些行,则需要使用fork,它实际上创建了程序的副本,作为原始程序的子程序。如果这是您希望实现的功能类型,那么这应该为您提供一些关于叉子的好资源。
要在C中正确调用叉,代码如下所示:
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调用。
https://stackoverflow.com/questions/29068787
复制相似问题