このプログラムと同じディレクトリにあり、下の行を含むbashスクリプト(sc.sh
)の出力をCプログラム(cprog
)の入力に入れたいと思います。 ; cprog
作品を実行するが、bashスクリプトが開始されていない理由を私は知らない。フォークexecとbashスクリプト付きパイプ
timeout 5 cat /dev/urandom
、これがメインプログラムである:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc, char* argv[])
{
int fd[2];
pid_t pid1, pid2;
char * input[] = {"/bin/bash", "sc.sh", argv[1], NULL};
char * output[] = {"./cprog", argv[1], NULL};
pipe(fd);
pid1 = fork();
if (pid1 == 0) {
dup2(fd[1], STDOUT_FILENO);
close(fd[0]);
execv(input[0], input);
return 1;
}
pid2 = fork();
if (pid2 == 0) {
dup2(fd[0], STDIN_FILENO);
close(fd[1]);
execv(output[0], output);
return 1;
}
close(fd[0]);
close(fd[1]);
waitpid(pid1, NULL, WNOHANG);
waitpid(pid2, NULL, WNOHANG);
return 0;
}
Szymonでは、インデントの使用を検討する必要があります。 :) – ZbyszekKr
関数呼び出しの戻り値を確認する必要があります。 –
'bash -c'が必要です。 – EOF