1

端末のパイプから、または引数としてファイル名を指定して、プログラムに入力をプルする方法を探しています。効果的に

1. foo | myprogram
OR
2. foo > bar; myprogram -w bar

2 番目の操作は、ファイルを読み取るだけで完了します。fooただし、出力をmyprogramパイプでリダイレクトする方法については空白を描いています。私が見つけたすべての例で、パイプは親プロセスから子プロセスへの IPC にほぼ独占的に使用されていることがわかりました。適切なパイプを考えていますか、それとも別のメカニズムですか?

foo | myprogramまた、が実行されると、プログラムが同時に実行されることにも気づきました。fooが連続して読み込まれる場合、これはどのように処理されますか。

編集:

これを含めるのを忘れました:

int main(){
    char buff[255];
    int i = read(0, buff, 255);
    printf("Debug: %s\n", buff);
    return 0;
}

たとえば、実行するls | myprogramと、受信する傾向があります。

. ../ files
Debug: 

それ以外の

Debug: . ../ files
4

2 に答える 2

3

2番目の操作は、ファイルを読み取るだけで実行できます。ただし、パイプを使用してfooからmyprogramに出力をリダイレクトする方法について空白を描画しています。

stdoutパイプリダイレクトを使用する場合、シェルは左側のプロセスのをセットアップしてstdin、右側のプロセスのに移動します。いつものように読んでstdinください。

于 2012-11-20T19:41:25.400 に答える
0

次のようなことができます。

FILE* input;
//...
if (argc == 1) {
    input = stdin;
} else {
    input = fopen(argv[2] /* or whatever */, "r");
}
于 2012-11-20T19:45:46.797 に答える