Cプログラムの出力をJavaプログラムへのコマンドライン入力として提供しますか?

Cプログラムの出力をJavaプログラムへのコマンドライン入力として提供しますか?

私はUnixファイルシステムについて学んでいます管路。 ~によるとオタク中のオタク

パイプは、2番目のプログラムが読み取られるまで、最初のコマンドの出力を保持します。

だからできるかと思いました。協会CプログラムそしてJavaプログラムCコードの出力をJavaコードのコマンドライン引数として提供します。

これは私のコードです。

CC

#include <stdio.h>
int main(){
    printf("World");
    return 0;
}

Java.java

public class Java{
    public static void main(String[] a){
        System.out.println("Hello "+a[0]); 
    }
}

Cオブジェクトファイル実行コマンドとJavaクラス実行コマンドを連結して、次のような出力を試みます。

Hello World

私が試したことは次のとおりです。

gcc -o c c.c
javac Java.java

./c | java Java

仕事は期待どおりに進まなかった。 JavaプログラムはCプログラムの出力を受け取らずに例外を発生させますArrayIndexOutOfBounds。また、Cプログラムの出力も表示できません。

可能であれば、どのように目標を達成できますか?

ベストアンサー1

あなたが望むことは可能ですが、試みほど簡単ではありません。正しく指摘したように、パイプはコマンドライン引数ではなく入力を提供します。

幸いなことに、これを行う(標準的な)手順があります。xargs

GNUワールド(Linux)の最善のアプローチは、出力要素をリテラルゼロバイトに分割することです。

/your/c/program | xargs --no-run-if-empty -0 /your/java/program

以下を使用して簡単に試すことができますecho(とにかく基本的なコマンドです)xargs

echo '/bin
/etc
/usr' | xargs ls -ld

おすすめ記事