运行 'grep' 命令使用 exec 函数
Running 'grep' command using exec functions
我正在尝试 运行 使用 execvp 的 grep 命令。我必须将输出保存到 output.txt 这样的输出文件中。我试过的代码如下:
#include<iostream>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>
using namespace std;
int main(){
pid_t pid = fork();
int status = 0;
char* args[] = {"grep", "-n", "out", "*", ">", "output.txt", NULL};
//char* args[] = {"out", "/os_lab/assign_01/*", "/usr", NULL};
if(pid == 0){
cout<<"I am Child Process\n";
status = 2;
execvp("grep", args);
}
else if(pid > 0){
cout<<"I am Parent Process\n";
wait(&status);
}
else{
cout<<"Error in system call\n";
}
return 0;
}
当我运行这段代码时,终端输出如下:
I am Parent Process
I am Child Process
grep: *: No such file or directory
grep: >: No such file or directory
execvp()
函数直接调用程序并使用提供的参数执行它。 wildcards
像 *
的使用由 shell 终端提供,因此 grep
将 *
理解为一个文件 grep'ed
.
如果您想使用通配符和运算符 >
调用 grap,您应该在 C++ 上使用函数 system()
。
以下代码应该有效:
#include<iostream>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>
using namespace std;
int main(){
pid_t pid = fork();
int status = 0;
//char* args[] = {"grep", "-n", "out", "*", ">", "output.txt", NULL};
//char* args[] = {"out", "/os_lab/assign_01/*", "/usr", NULL};
if(pid == 0){
cout<<"I am Child Process\n";
status = 2;
//execvp("grep", args);
system("grep -n out * > output.txt");
}
else if(pid > 0){
cout<<"I am Parent Process\n";
wait(&status);
}
else{
cout<<"Error in system call\n";
}
return 0;
}
我正在尝试 运行 使用 execvp 的 grep 命令。我必须将输出保存到 output.txt 这样的输出文件中。我试过的代码如下:
#include<iostream>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>
using namespace std;
int main(){
pid_t pid = fork();
int status = 0;
char* args[] = {"grep", "-n", "out", "*", ">", "output.txt", NULL};
//char* args[] = {"out", "/os_lab/assign_01/*", "/usr", NULL};
if(pid == 0){
cout<<"I am Child Process\n";
status = 2;
execvp("grep", args);
}
else if(pid > 0){
cout<<"I am Parent Process\n";
wait(&status);
}
else{
cout<<"Error in system call\n";
}
return 0;
}
当我运行这段代码时,终端输出如下:
I am Parent Process
I am Child Process
grep: *: No such file or directory
grep: >: No such file or directory
execvp()
函数直接调用程序并使用提供的参数执行它。 wildcards
像 *
的使用由 shell 终端提供,因此 grep
将 *
理解为一个文件 grep'ed
.
如果您想使用通配符和运算符 >
调用 grap,您应该在 C++ 上使用函数 system()
。
以下代码应该有效:
#include<iostream>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>
using namespace std;
int main(){
pid_t pid = fork();
int status = 0;
//char* args[] = {"grep", "-n", "out", "*", ">", "output.txt", NULL};
//char* args[] = {"out", "/os_lab/assign_01/*", "/usr", NULL};
if(pid == 0){
cout<<"I am Child Process\n";
status = 2;
//execvp("grep", args);
system("grep -n out * > output.txt");
}
else if(pid > 0){
cout<<"I am Parent Process\n";
wait(&status);
}
else{
cout<<"Error in system call\n";
}
return 0;
}