0

あるプログラムから別のプログラムにいくつかのパラメーターを転送したいと考えています。

たとえば、ここに 2 つのプログラムがあります。としてコンパイルされた ac

#include <stdio.h>

int main() {
    char a[10];
    scanf("%s", a);
    printf("%s\n", a);
    return 0;
}

および ec は e としてコンパイルされます:

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

int main() {
    char *input = "here it is";
    execl("./a", "a", "a",  NULL);
    return 0;
}

実際には、パラメータ「a」をecからacに転送して、プログラム「e」を実行すると出力されるようにしたいと思います

 a
 a

excelしかし、指定されたプログラムにパラメーターを渡すことができないことがわかりました。

プログラム ac を変更できない場合、標準入力を使用して別のプログラムを使用してこのプログラムを実行するにはどうすればよいですか?

4

1 に答える 1

0

を変更できない場合はa.c、データをファイルに書き込んでから、stdinをリセットしてそのファイルから読み取る必要があります。

FILE *fp = fopen("somefile", "w");
if (fp == NULL)
    // handle error
fputs(input, fp);
fclose(fp);

if (freopen("somefile", "r", stdin) == NULL)
    // handle error
unlink("somefile");
execl("./a", "a", NULL);

システムコールは、ファイルの処理が完了するとunlinkファイルが消えることを確認しますa

注:メッセージが非常に小さいため、パイプのバッファー内に収まるため、ファイルの代わりにパイプを使用できる場合があります。ただし、これは大きなメッセージに対して信頼できるソリューションではありません。パイプを使用する場合は、を行う必要がありますfork

于 2013-01-23T18:04:16.803 に答える