[英]Can't execute console commands in C with fork and pipe
我正在嘗試在C上制作程序,該程序執行控制台shell命令
貓log.txt | awk'{print $ 7}'| 頭-10
但第三個命令不適用於2個當前命令。 這就是我所做的
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
int fd[2], status;
pipe(fd);
pid_t pid1 = fork();
if (!pid1)
{
dup2(fd[1], 1);
close(fd[0]);
close(fd[1]);
char* command[3] = {"/bin/cat", "log.txt", 0};
execvp(command[0], command);
exit(EXIT_FAILURE);
}
else if (pid1 == -1)
{
fprintf(stderr, "Can't fork, exiting...\n");
exit(EXIT_FAILURE);
}
pid_t pid2 = fork();
if (!pid2) {
dup2(fd[0], 0);
close(fd[0]);
close(fd[1]);
char* command[3] = {"awk", "{ print $7 }", 0};
execvp(command[0], command);
exit(EXIT_FAILURE);
} else if (pid2 == -1) {
fprintf(stderr, "Can't fork, exiting...\n");
exit(EXIT_FAILURE);
}
pid_t pid3 = fork();
if (!pid3) {
dup2(fd[0], 0);
close(fd[0]);
close(fd[1]);
char* command[3] = {"head", "-10", 0};
execvp(command[0], command);
exit(EXIT_FAILURE);
} else if (pid3 == -1) {
fprintf(stderr, "Can't fork, exiting...\n");
exit(EXIT_FAILURE);
}
close(fd[0]);
close(fd[1]);
waitpid(pid1, NULL, 0);
waitpid(pid2, NULL, 0);
waitpid(pid3, &status, 0);
exit(status);
return 0;
}
pid3無法執行。 我試圖在pid3中制作dup2(fd [1],1),但是那是行不通的。 pid3應該具有什么功能才能工作,以及如何使用dup2進行3個以上的命令?
您將必須設置兩個管道-一個用於將cat
連接到awk
,另一個用於將awk
連接到head
。
另外,請不要關閉您實際需要的文件描述符(例如,第一個fork中的fd[0]
!)。
您已經創建了一個管道。 一管有兩端。 兩端足以完成兩個過程。 如果在一個管道中全部有三個進程,則需要兩個管道。 中間的過程保持在兩個管道上,其他兩個過程保持在其余端上。
看這張圖片:
cat | awk | head
看到兩個管道符號? 它們是您需要的兩條管道。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.