[英]Pipe two shell commands in C
我正在尝试执行grep -o colour colourfile.txt | wc -w > newfile.txt
grep -o colour colourfile.txt | wc -w > newfile.txt
通过C中的程序,而不是使用命令行。
这是我到目前为止:
#include <stdlib.h>
#include <unistd.h>
int main (void) {
int fd[2];
pipe(fd);
if (fork()) {
// Child process
dup2(fd[0], 0); // wc reads from the pipe
close(fd[0]);
close(fd[1]);
execlp("wc", "wc", "-w", ">", "newfile.txt", NULL);
} else {
// Parent process
dup2(fd[1], 1); // grep writes to the pipe
close(fd[0]);
close(fd[1]);
execlp("grep", "grep", "-o", "colour", "colourfile.txt", NULL);
}
exit(EXIT_FAILURE);
}
if (fork()) {
表示parent process
不是child process
,请参阅http://man7.org/linux/man-pages/man2/fork.2.html >
喜欢|
使用open()
以下code
可以工作:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
int main (void) {
int pipefd[2];
pipe(pipefd);
if (fork()) {
// Child process
dup2(pipefd[0], 0); // wc reads from the pipe
close(pipefd[0]);
close(pipefd[1]);
int fd = open("newfile.txt", O_CREAT|O_TRUNC|O_WRONLY, S_IRUSR|S_IWUSR);
dup2(fd, 1);
close(fd);
execlp("wc", "wc", "-w", NULL);
} else {
// Parent process
dup2(pipefd[1], 1); // grep writes to the pipe
close(pipefd[0]);
close(pipefd[1]);
execlp("grep", "grep", "-o", "colour", "colourfile.txt", NULL);
}
exit(EXIT_FAILURE);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.