パイプを通って外部プログラムにSTDINデータを使用する方法:私はこのメインプログラム持って
char data[1024]="Hello World!";
int main(int argc,char *argv[])
{
pid_t pid;
int f1[2];
pipe(f1);
if((pid=fork())==0)
{
close(f1[1]);
dup2(f1[0], STDIN_FILENO);
if((execlp("./2","./2",NULL))==-1) printf("error");
close(f1[0]);
}
else
{
close(f1[0]);
dup2(f1[1],STDOUT_FILENO);
write(f1[1], data, sizeof(data));
close(f1[1]);
wait(NULL);
}
return 0;
}
と2.Cプログラムを:私はデータIを使用したい場合は
int main(int argc,char *argv[])
{
char DATA[1024];
//sprintf(DATA,"J'ai lu %s",argv[1]);
//read(0,DATA,sizeof(DATA));
int taille=strlen(DATA);
int i;
for(i=0;i<taille;i++)
{
if(DATA[i]=='c')
{
printf("found");
}
}
}
子供が実行するプログラムで親によってSTDOUTに書き込むと、execプログラムのSTDINから読み込む必要がありますか、execlpの引数としてデータを渡す必要がありますか?それとも別の何か?
あなたが書いている、親プログラムにstdout' 'への書き込みをしていませんパイプに接続します。しかし、あなたは子供の 'stdin'から読む必要があります。 – Barmar
ちょうど間違いのコピー、申し訳ありません。それを修正! – Amine
あなたはまだ 'STDOUT_FILENO'ではなく' f1 [1] 'に書いています。 – Barmar